- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- 用Spring Native將SpringBoot程序轉換為GraalVM
Spring發(fā)布了一個(gè)新工具Spring Native Beta,用于將現有的Spring Boot應用程序(用Java或Kotlin編寫(xiě))轉換為GraalVM本機映像。目標是在springnative上支持Spring Boot應用程序。GraalVM本機映像很小,經(jīng)過(guò)優(yōu)化,啟動(dòng)速度很快。然而,與JVM相比,折衷的辦法是構建時(shí)間更長(cháng),運行時(shí)優(yōu)化更少。
Spring Native與GraalVM團隊合作,充當橋梁,確保GraalVM理解傳統的SpringBoot代碼。Oracle實(shí)驗室的高級研究經(jīng)理Vojin Jovanovic在談到他們與Spring的合作時(shí)說(shuō):
與Spring團隊合作構建本機JVM生態(tài)系統是一件非常愉快的事情:他們深厚的技術(shù)知識和對社區敏感的觸覺(jué)總能帶來(lái)最好的解決方案。最新的Spring本機版本及其在JVM生態(tài)系統中的大量使用為本機編譯的廣泛采用鋪平了道路。
在后臺,Maven和Gradle提供的提前(AOT)插件用于將Spring引導應用程序轉換為本機代碼。這些插件為GraalVM不支持的所有Spring元素(如反射和代理)生成GraalVM本機配置。生成的配置存儲在reflect-config.json 文件。例如,用@Service注釋的每個(gè)類(lèi)都在JSON文件中配置。
假設Spring本機配置文件位于META-INF/Native-image文件夾中,則可以發(fā)現它們。本機提示可用于配置SpringNative尚不支持的元素,例如MySQL驅動(dòng)程序配置。
創(chuàng )建新項目時(shí),Spring Initializer中提供了Spring本機依賴(lài)項。
一些依賴(lài)項,比如springdatajpa,需要額外的配置來(lái)支持GraalVM。Spring團隊通過(guò)插件提供這些額外的配置。例如,在Intitializr中添加了Spring數據JPA依賴(lài)項之后,兩個(gè)額外的Maven插件Spring aot Maven plugin和hibernate enhance Maven plugin(包括它們的配置)被添加到pom.xml文件。
此時(shí)并非所有依賴(lài)項都受Spring Native支持。如果initializer生成的Spring項目中包含不支持的依賴(lài)項,則HELP.md 文件將列出它。
與任何其他Spring Boot應用程序一樣,Initializer會(huì )自動(dòng)創(chuàng )建適當的入口點(diǎn)類(lèi)來(lái)運行應用程序:
@SpringBootApplication public class NativeApplication { public static void main(String[] args) { SpringApplication.run(NativeApplication.class, args); } }
接下來(lái),提供一個(gè)REST controller來(lái)測試應用程序:
@Controller public class NativeEndpoint { @GetMapping("/native") public String nativeCall() { return "Native"; } }
除了標準的SpringBoot依賴(lài)項之外,Initializer還為SpringNative支持添加了一個(gè)新的依賴(lài)項:
<dependency> <groupId>org.springframework.experimental</groupId> <artifactId>spring-native</artifactId> <version>${spring-native.version}</version> </dependency>
spring boot maven插件接收了一些額外的配置來(lái)生成本機映像:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <builder>paketobuildpacks/builder:tiny</builder> <env> <BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE> </env> </image> </configuration> </plugin>
Maven可用于通過(guò)提前編譯生成本機映像。生成的可執行文件包括所有必要的類(lèi)和來(lái)自JDK的靜態(tài)鏈接本機代碼。底層VM被用作運行時(shí)系統,而不是普通的javavm。
$ ./mvnw spring-boot:build-image
在編譯和優(yōu)化代碼時(shí),構建映像需要一些時(shí)間。此步驟在Docker映像中執行,需要相當多的內存。如果發(fā)生以下錯誤,應增加Docker的內存設置:
Exception in thread "native-image pid watcher" java.lang.OutOfMemoryError: GC overhead limit exceeded
執行上述Maven命令的輸出顯示了結果Docker映像,其中包含GraalVM本機映像:
Successfully built image 'docker.io/library/native:0.0.1-SNAPSHOT'
生成的映像約為82 MB,包含運行應用程序的所有內容:
$ docker images native 0.0.1-SNAPSHOT ... 81.9MB
Docker容器在端口8080上啟動(dòng):
$ docker run -p 8080:8080 native:0.0.1-SNAPSHOT
啟動(dòng)容器后,應用程序幾乎可以立即進(jìn)行測試:
$ curl localhost:8080/native --silent Native
以上就是用Spring Native將SpringBoot程序轉換為GraalVM的詳細內容,更多關(guān)于SpringBoot程序轉換為GraalVM的資料請關(guān)注腳本之家其它相關(guān)文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站