[GraalVM] Micronaut 2.0について [Serverless]

2020.08.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Introduction

以前、Micronauto 1.xの記事を投稿したのですが、
先日Micronauto 2.0にバージョンアップしました。
くわしくはこのあたりにありますが、
ネイティブイメージのサポート強化やserverlessサポート改善など、けっこう大きい変更が多くはいってます。

What's New

ここに新しい機能が記述してありますが、
気になった機能をいくつか紹介します。

MICRONAUT LAUNCH

MICRONAUT LAUNCHSpring Initializrみたいに、Applicationタイプや言語を指定してプロジェクトの雛形を生成できるツールです。

↑はブラウザで実行していますが、CLIで実行することもできます。

PERFORMANCE IMPROVEMENTS

起動時間、メモリ消費量、その他のパフォーマンスについての改善。
Micronaut 2.0では、平均起動時間は20%程度改善されているとのこと。

IMPROVED SERVERLESS SUPPORT

1.xからAWS Lambdaについてはサポートしていましたが、
2.0ではそれに加えてGoogle Cloud FunctionAzure Functionのサポートも追加。
さらに、AWS SDK 2 のための GraalVMネイティブイメージのサポートも追加されてます。

参考: https://micronaut-projects.github.io/micronaut-aws/2.0.x/guide/index.html#sdkv2

SERVLET SUPPORT

以前はNettyだけでしたが、2.xでは、Jetty/Tomcatなどの組み込みサーバがサポートされました。
GraalVMをサポートしているので、Jetty/Tomcat用のネイティブイメージを生成することもできます。

参考 : https://github.com/micronaut-projects/micronaut-servlet

GRAALVM IMPROVEMENTS

GraalVMのサポートが強化。
静的リソース、JDBCドライバ、Hibernate、Flyway、AWS SDK 2などの
automatic configurationサポートを追加しています。 

try Micronaut2

では少しだけMicronaut 2.0をためしてみましょう。
以前やったのと同じように、sdkmanを使ってMicronautをインストールします。

% sdk install micronaut
Downloading: micronaut 2.0.1

In progress...
Installing: micronaut 2.0.1
Done installing!

mnコマンドを使ってアプリの雛形を作成します。
featuresオプションを使うことで、servletコンテナを指定します。
ここではtomcatで動くように指定しました。

% mn create-app myTomcatApp --features tomcat-server
| Application created at /path/your/micronaut/myTomcatApp

作成したmyTomcatAppディレクトリに移動してmnコマンドを実行することで、インタラクティブモードに入ります。
試しに適当なControllerでもつくってみましょう。

% cd myTomcatApp 
% mn
mn> create-controller helloController
| Rendered controller to src/main/java/myTomcatApp/HelloControllerController.java
| Rendered test to src/test/java/myTomcatApp/HelloControllerControllerTest.java

Controller以外にもtestやservice作成など、いろいろできるので確認してみてください。

gradle runコマンドで実行します。

% ./gradlew run

> Task :compileJava

> Task :run
8月 30, 2020 5:03:48 午後 org.apache.coyote.AbstractProtocol init
情報: Initializing ProtocolHandler ["http-nio-8080"]
8月 30, 2020 5:03:48 午後 org.apache.catalina.core.StandardService startInternal
情報: Starting service [Tomcat]
8月 30, 2020 5:03:48 午後 org.apache.catalina.core.StandardEngine startInternal
情報: Starting Servlet engine: [Apache Tomcat/9.0.37]
8月 30, 2020 5:03:48 午後 org.apache.coyote.AbstractProtocol start
情報: Starting ProtocolHandler ["http-nio-8080"]
17:03:48.414 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 2585ms. Server Running: http://localhost:8080
io.micronaut.context.DefaultApplicationContext$RuntimeConfiguredEnvironment@19553973
<=========----> 75% EXECUTING [5m 7s]
> :run

コンソールをみると、Tomcatでうごいていることがわかります。

Summary

GraalVMサポート強化、Serverlessサポート強化など、いろいろ使いやすくなってますね。
いろいろおもしろそうな機能もあるので、今後試してみたいと思います。

reference