將Spring Boot應用變成GraalVM本機映象快速執行 - codecentric

banq發表於2020-05-26

將應用軟體作為GraalVM映象能快速執行,Micronaut,Quarkus.io&Co.框架都以支援GraalVM為榮!但是Spring是企業Java中無可爭議的先驅,將Spring Boot與GraalVM的優勢結合起來不是很好嗎?

可以在GitHub上找到一個示例專案,只需要執行/target/native-image/spring-graal-vm下可執行檔案,這個Spring Boot App能在0.078秒內啟動!!通過localhost:8080/hello可訪問該應用程式。

GraalVM本機映象主要可以通過兩種方式配置:通過JSON檔案進行靜態配置和通過動態配置。

靜態配置檔案可以通過Graal Native Image Agent手工製作或生成。動態配置能夠處理更復雜的情況。

通過將傳統上在執行時發生的動態反射魔術轉移到本機映象的編譯階段,可以極大地減少Java應用程式的啟動時間和記憶體佔用。當我們考慮在普通的Java應用程式中使用一點點反射時,這種編譯已經變成一項艱鉅的工作,因此當我們檢視Spring時,這變得更加困難。

但是Spring團隊確實承擔了這個巨大的挑戰!Andy Clement和SébastienDeleuze已經作為實驗專案提供了Graal @AutomaticFeature for Spring的實現。並且已經有大量使用此功能建立GraalVM本機映像的示例Spring專案示例。我發現這絕對很棒,真的很想仔細看看!

使用SDKMAN安裝GraalVM

為了使用GraalVM,我們需要做的第一件事就是安裝它。SKDMAN可以用來管理JDK和Java工具(例如Maven或GraalVM)。為了使用SDKMAN,我們需要在本地安裝它

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

如果SDKNMAN安裝成功,執行sdk list java 可看到輸出。

這種方法的簡單性是:不要再搞JDK安裝了!現在要安裝基於JDK11的GraalVM,只需執行:

sdk install java 20.0.0.r11-grl

在為我們安裝GraalVM。為了正確配置PATH變數,您可能需要重新啟動控制檯。如果一切順利,您應該看到java -version輸出。

安裝GraalVM本機映象

我們需要GraalVM的子專案Native Image來編譯Spring Boot Apps。因此,GraalVM附帶了特殊工具gu– (GraalVM更新器)。要列出當前安裝的所有GraalVM專案,請執行:

$ gu list
ComponentId              Version             Component name      Origin
--------------------------------------------------------------------------------
graalvm                  20.0.0              GraalVM Core

安裝GraalVM本機映象,執行:

gu install native-image

執行native-image --version可檢查安裝好的版本。

準備Spring Boot使其對Graal Native友好

現在,為了能夠本地編譯我們的Spring Boot應用程式,在執行native-image命令之前,需要準備一些事情:

  1. 重新定位註釋類路徑掃描
  2. 禁用GCLIB代理的使用
  3. 檢測autoconfiguration
  4. 獲取Spring Graal @AutomaticFeature
  5. 在pom.xml中設定start-class元素
  6. 準備用於本機映象命令的配置
  7. 構建應用程式,擴充套件胖的JAR並配置類路徑
  8. 製作native-image命令

具體八個步驟點選標題見原文。

 

相關文章