Micronaut で Hello World するだけしてみる


f:id:Naotsugu:20190410235532p:plain

Micronaut とは


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 が返る

f:id:Naotsugu:20190410235225p:plain


http://localhost:8080/hello/world でコントローラの結果が得られる。

f:id:Naotsugu:20190410235936p:plain



つづく。。