Micronaut とは
- マイクロサービスベース用のフルスタックフレームワーク
- 低フットプリント
- JVMベースで、Java・Kotlin・Groovy などで書ける
- GraalVM の native image の実験的サポートがある
- コンパイル時に DI 解決(annotation processor)するため起動が早い
- Grails 開発チームが作成
Quick Start
本家の Quick Start では、専用のCLIにて Grails のように足場コードを作成していきますが、ここでは単純に Gradle でプロジェクト作成していく
プロジェクト作成
$ mkdir micronaut $ cd micronaut $ gradle init --type java-application
作成された build.gradle を以下のように変更
buildscript { repositories { mavenCentral() maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "com.github.jengelman.gradle.plugins:shadow:2.0.4" classpath "io.spring.gradle:dependency-management-plugin:1.0.6.RELEASE" classpath "net.ltgt.gradle:gradle-apt-plugin:0.15" } } version "0.1" group "example" apply plugin:"io.spring.dependency-management" apply plugin:"com.github.johnrengelman.shadow" apply plugin:"application" apply plugin:"java" apply plugin:"net.ltgt.apt-idea" repositories { mavenLocal() mavenCentral() maven { url "https://jcenter.bintray.com" } } dependencyManagement { imports { mavenBom 'io.micronaut:micronaut-bom:1.0.3' } } dependencies { annotationProcessor "io.micronaut:micronaut-inject-java" annotationProcessor "io.micronaut:micronaut-validation" annotationProcessor "io.micronaut.configuration:micronaut-openapi" compile "io.micronaut:micronaut-http-client" compile "io.micronaut:micronaut-http-server-netty" compile "io.micronaut:micronaut-inject" compile "io.micronaut:micronaut-runtime" compile "io.micronaut.configuration:micronaut-hibernate-validator" compile "io.swagger.core.v3:swagger-annotations:2.0.4" compileOnly "io.micronaut:micronaut-inject-java" runtime "ch.qos.logback:logback-classic:1.2.3" testCompile "io.micronaut:micronaut-inject-java" testCompile "io.micronaut.test:micronaut-test-junit5:1.0.1" testCompile "org.mockito:mockito-junit-jupiter:2.22.0" testRuntime "org.junit.jupiter:junit-jupiter-engine:5.1.0" } shadowJar { mergeServiceFiles() } test { useJUnitPlatform() } run.jvmArgs('-noverify', '-XX:TieredStopAtLevel=1') mainClassName = "example.Application" compileJava.options.compilerArgs += '-parameters' compileTestJava.options.compilerArgs += '-parameters'
Gradle が初期生成した App.java
などは削除
アプリケーションの作成
example.Application.java
を作成
package example; import io.micronaut.runtime.Micronaut; public class Application { public static void main(String[] args) { Micronaut.run(Application.class); } }
コントローラ example.HelloController.java
を作成
package example; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; import io.micronaut.validation.Validated; import io.reactivex.Single; import javax.validation.constraints.NotBlank; @Controller("/") @Validated public class HelloController { @Get(uri = "/hello/{name}", produces = MediaType.TEXT_PLAIN) public Single<String> hello(@NotBlank String name) { return Single.just("Hello " + name + "!"); } }
実行
Gradle の application プラグインがあるので、run
するだけ
$ ./gradlew run
起動は以下のように 685ms と早いですね。
・・・ 00:00:00.000 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 685ms. Server Running: http://localhost:8080 <=========----> 75% EXECUTING [6s] > :run
http://localhost:8080
でアクセスすると、以下のような Not Found な JSON が返る
http://localhost:8080/hello/world
でコントローラの結果が得られる。
つづく。。