0.02 秒就起來的 Java 應用有看過嗎??? 雖然這個專案不大,這個速度對 JVM 來說還是很驚人
今天要來打包 Quarkus 應用,沒有經驗也沒有關係,Quarkus 有自帶 README.md 教學,十分的貼心。所以今天我們會把 application 包成 jar 以及 native 可執行檔。為了打包成 native ,相容性的問題要先考慮。JSON Serialization lib 在 Quarkus 有以下的選擇。其中 Jackson 算是對 native 比較不會出問題。
Artifact | 說明 |
---|---|
quarkus-resteasy-reactive-jackson | JSON Serializer Jackson 的實現 |
quarkus-resteasy-reactive-jsonb | JSON Serializer JsonB 的實現 |
quarkus-resteasy-reactive-kotlin-serialization | JSON Serializer Kotlin Serialization 的實現 |
在 pom.xml 找到 quarkus-resteasy-reactive-kotlin-serialization
換成 quarkus-resteasy-reactive-jackson
。在 Data Class 裡面打上的 Serializable Annotation 也都可以拿掉。
在 Shell console 打上 ./mvnw package
就可以直接打包,但是這樣的包跟 lib 是分散的。包成 uber-jar 整個的大包的 jar 是比較推薦的作法, 大概 20秒打包完成。在打包前建議跑個 ./mvnw clean
比較乾淨
./mvnw package -Dquarkus.package.type=uber-jar
執行以下指令,用 java -jar 運行,不到一秒就起來了!!!!
java -jar target/getting-startQK-1.0.0-SNAPSHOT-runner.jar
用以下指令打包成執行檔,這個會跑比較久,大概1-3分鐘。
./mvnw package -Pnative
這是個執行檔,我們直接執行就可以囉~~~~ 哇賽,各位觀眾 - 千分之二秒
./target/getting-startQK-1.0.0-SNAPSHOT-runner
Quarkus 自帶了4款的 Dockerfile,裡面都有相對的指示。
例如我們打開了src/main/docker/Dockerfile.jvm
就可以看到要下兩個指令,只是我們需要把 docker 換成 podman
./mvnw clean package
podman build -f src/main/docker/Dockerfile.jvm -t quarkus/getting-start-jvm .
明天來談談為什麼 quarkus 可以起的這麼快