
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 でコントローラの結果が得られる。

つづく。。