Spring PetClinic をSpringの代わりに Micronaut を使って実装してみた。
PetClinicなので単純なHelloWorldじゃなくて、ThymeleafとかJPA(Hibernate)とかDIとかを使ってるんだけど、GraalVM のNative Imageでビルドしたら200-400msくらいで起動する。はやいー。
この画像だと324msで起動してる:
全部実装したわけじゃなくて結構まだぐちゃぐちゃしてるけど、基本的な機能は動くようにしておいた。
## 使い方
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にアクセスする
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もこれからって感じだけど、楽しみだなー!