MicronautでPetClinicを実装してNative Image化したら300msくらいで起動したーはやいー

Spring PetClinic をSpringの代わりに Micronaut を使って実装してみた。

github.com

PetClinicなので単純なHelloWorldじゃなくて、ThymeleafとかJPA(Hibernate)とかDIとかを使ってるんだけど、GraalVM のNative Imageでビルドしたら200-400msくらいで起動する。はやいー。

この画像だと324msで起動してる:

Screen Capture

全部実装したわけじゃなくて結構まだぐちゃぐちゃしてるけど、基本的な機能は動くようにしておいた。

## 使い方

Native Imageじゃない場合から

### 1. git cloneして

git clone https://github.com/bufferings/micronaut-petclinic.git
cd micronaut-petclinic

### 2. PostgreSQLを起動して

このPetClinicはPostgreSQLを使う。Docker Composeでデータも用意しておいたのでこれでデータ入りのPostgreSQLが立ち上がる:

docker-compose up

### 3. アプリを実行

./mvnw compile exec:exec

### 3-2. JARを使いたかったらこう

./mvnw package
java -jar target/micronaut-*.jar

### 4. PetClinicにアクセスする

http://localhost:8080/

JARファイルだと僕のノートPCだとだいたい5秒くらいで起動するかな。

## Native Image化

じゃ、Native Imageを作ろう

MicronautがGraalVMのNative Imageのビルドを色々サポートしてくれてるので、このPetClinicもNative Imageとしてビルドして実行できるようにしといた。

./mvnw package && docker build -t micronaut-petclinic .

10分くらいかかるから ☕ 飲みながら待ってる。メモリも4GBくらい使うから、OOMで落ちるときはDockerに対するメモリの割り当て見てみてね。

で、こんな感じで起動する:

# Docker for Mac or Windows
export HOST_NAME=host.docker.internal
# Linux
export HOST_NAME=172.17.0.1

docker run --rm -p 8080:8080 -e JDBC_URL=jdbc:postgresql://${HOST_NAME}:5432/petclinic micronaut-petclinic

300msぐらいで起動するよー (๑•̀ㅂ•́)و✧

まだまだGraalVMもMicronautもこれからって感じだけど、楽しみだなー!