將Spring Boot應用變成GraalVM本機映象快速執行 - codecentric
將應用軟體作為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命令之前,需要準備一些事情:
- 重新定位註釋類路徑掃描
- 禁用GCLIB代理的使用
- 檢測autoconfiguration
- 獲取Spring Graal @AutomaticFeature
- 在pom.xml中設定start-class元素
- 準備用於本機映象命令的配置
- 構建應用程式,擴充套件胖的JAR並配置類路徑
- 製作native-image命令
具體八個步驟點選標題見原文。
相關文章
- Spring Native釋出:使用GraalVM將Spring應用編譯為本機映象SpringLVM編譯
- 在GraalVM中部署執行Spring Boot應用 - Indrek OtsLVMSpring Boot
- 通往Spring Boot本機應用的道路:Spring GraalVM Native 0.7.0可以使用了 - spring.ioSpring BootLVM
- GraalVM原生本機映象提示和技巧 -James WardLVM
- 如何使用ParcelJS在Spring Boot應用程式中打包前端 - codecentric AG BlogJSSpring Boot前端
- Windows下使用Graalvm將Javafx應用編譯成exeWindowsLVMJava編譯
- Windows下使用Graalvm將Springboot應用編譯成exe大大提高啟動和執行效率WindowsLVMSpring Boot編譯
- Spring Boot 2.5.x能支援Java 17了 - codecentricSpring BootJava
- Spring Boot 單體應用一鍵升級成 Spring Cloud AlibabaSpring BootCloud
- 利用神器BTrace 追蹤線上 Spring Boot應用執行時資訊Spring Boot
- Spring Boot 建立 Docker 映象Spring BootDocker
- GraalVM快速參考指南 - graalvmLVM
- 結合GraalVM與Spring Native的Spring Boot原始碼教程 | foojayLVMSpring Boot原始碼
- Spring Boot執行緒安全指南Spring Boot執行緒
- 如何執行Spring Boot專案Spring Boot
- spring boot 執行sql檔案Spring BootSQL
- Spring Boot應用中進行任務排程Spring Boot
- 《Spring Boot從零開始學(視訊教學版)》快速入門Spring Boot應用開發Spring Boot
- 使用SDM快速部署Spring Boot應用到KubernetesSpring Boot
- #好書推薦##好書奇遇季#三本書帶您快速深入掌握Spring Boot應用開發Spring Boot
- 如何在Spring Boot應用啟動之後立刻執行一段邏輯Spring Boot
- Spring Boot系列(一):Spring Boot快速開始Spring Boot
- Hazelcast JET在Spring Boot上執行ASTSpring Boot
- Spring boot應用如何支援httpsSpring BootHTTP
- Spring Boot 之路(一):一個簡單的Spring Boot應用Spring Boot
- spring-boot-route(十八)spring-boot-adtuator監控應用Springboot
- 七行JSON程式碼將你的網站變成移動應用JSON網站
- 在Spring Boot應用啟動時如何執行程式碼? -DukesletterSpring Boot行程
- 構建一個執行在Azure虛擬機器上的MySQL Spring Boot應用程式虛擬機MySqlSpring Boot
- Spring Boot @Async 非同步任務執行Spring Boot非同步
- 使用Spring Boot和GraalVM在Knative上構建微服務 - piotrSpring BootLVM微服務
- Spring-Boot快速上手Springboot
- Spring Boot 快速整合SwaggerSpring BootSwagger
- spring boot快速入門Spring Boot
- 【Spring Boot】快速整合SwaggerSpring BootSwagger
- Spring Boot Intellij 執行應用的時候 Command line is too long. Shorten command line for 錯誤Spring BootIntelliJ
- 如何將Spring Boot應用中日誌輸出格式改為JSON?-DEVSpring BootJSONdev
- Spring Boot應用監控實戰Spring Boot