Java CRaC 上的Spring Boot3
除了GraalVM之外,在最近的Geecon會議上討論最多的另一項技術是一個名為Java on CRaC的專案。
這個專案帶來了兩個功能,CRaC上的Java基本上在Oracle GraalVM上執行(目前)。
- 超快的應用程式啟動。甚至比GraalVM的本地映象還要快
- 快照應用的想法允許你立即啟動到應用程式的狀態,無需資料預熱,只是砰的一聲!應用程式在啟動時就已經載入了所有的東西!
先決條件:
1、Linux machine (in my case):
INFRA [root@payment01 ~]# cat /etc/os-release NAME="Red Hat Enterprise Linux" VERSION="8.6 (Ootpa)" |
2、Java on CRaC installed as JDK:
INFRA [root@payment01 ~]# java -version openjdk version "17-crac" 2021-09-14 OpenJDK Runtime Environment (build 17-crac+3-15) OpenJDK 64-Bit Server VM (build 17-crac+3-15, mixed mode, sharing) |
3、maven:
INFRA [root@payment01 ~]# mvn -version Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f) Maven home: /root/apache-maven-3.6.3 Java version: 17-crac, vendor: N/A, runtime: /root/openjdk-17-crac+3_linux-x64 Default locale: en_US, platform encoding: ANSI_X3.4-1968 OS name: "linux", version: "4.18.0-372.32.1.el8_6.x86_64", arch: "amd64", family: "unix" |
在CRaC上使用Java和Spring Boot的重要提示
要及時對你的應用程式進行CRaC檢查點,你必須:
- 關閉你的應用程式開啟的所有套接字。
- 關閉你的應用所開啟的所有檔案
第一個問題解決是使用嵌入式tomcat監聽CRaC檢查點生命週期:
<dependency> <groupId>io.github.crac.org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>8.5.75</version> </dependency> |
官方CRaC spring-boot example 示例中的8.5.78版本不能用於最後的Spring Boot 2.x , 請確保有9.0.58版本。我在含有CRaC的JDK 17上成功測試了Spring Boot 2.6.3。但更高版本的boot應該也可以工作。
CRaC和LINUX平臺問題
我在提到的RED_HAT linux上執行Java CRaC的經驗最好。在Oracle LINUX上執行CRaC是非常痛苦的。
總之,在這兩種情況下,我不得不採用以下的解決方法來建立應用程式檢查點。
MVC app for testing
@RestController public class TestController { IDataService dataService; public TestController(IDataService dataService) { this.dataService = dataService; } @GetMapping("/addData/{data}") public String addData(@PathVariable("data") String data) { dataService.addData(data); return data+" added."; } @GetMapping("/getData") public String getData() { return dataService.getData(); } } |
IDataService在記憶體中儲存資料。
總結
CRaC上的Java擊敗Oracle GraaVM的地方
- 與GraalVM相比,應用程式的啟動速度甚至更快
- 基於反射的框架對應用程式的快照來說不是問題。GraalVM在這一點上很糾結
- GraalVM不允許你像CRaC那樣及時從狀態中啟動應用程式。
Oracle GraaVM在CRaC上擊敗Java的地方
- 1000倍好的文件!
- GraalVM的本地映象比基於CRaC的應用程式少消耗5倍的記憶體。當記憶體是你的首要任務時,請選擇GraalVM。
原始碼案例點選標題
相關文章
- Spring Boot3 新玩法,AOT 最佳化!Spring Boot
- 使用 Spring Boot 3.2 和 CRaC 實現更快啟動Spring Boot
- 在spring boot3中使用native imageSpring Boot
- 快速啟動:基於CRaC實現Spring Boot 3恢復預熱Spring Boot
- 基於 Spring Boot3、Vue3!這套小說系統開源了...Spring BootVue
- OpenJDK的“CRaC檢查點協調恢復” - foojayJDK
- Spring系列第十五講 Spring中的Java動態代理技術(上)SpringJava
- java 上傳圖片 cxf,servlet,spring 標準方式JavaServletSpring
- Spring IoC bean 的建立(上)SpringBean
- Spring Security 上Spring
- Spring AOP (上)Spring
- Java程式設計方法論-Spring WebFlux篇 01 為什麼需要Spring WebFlux 上Java程式設計SpringWebUX
- Spring Boot的檔案上傳Spring Boot
- Spring 框架:Java 開發者的春天Spring框架Java
- Spring 4 支援的 Java 8 功能SpringJava
- 開發者眼中的Spring與Java EESpringJava
- Spring上傳檔案Spring
- Spring bean到底是如何建立的?(上)SpringBean
- Java Agent(上)Java
- 升鮮寶供應鏈管理系統重構版釋出(技術點:Java8、mysql8.0 uniapp、vue、android、web 框架: Vue3+Spring Boot3) ,介面功能(二 )JavaMySqlAPPVueAndroidWeb框架Spring Boot
- 升鮮寶供應鏈管理系統重構版釋出(技術點:Java8、mysql8.0 uniapp、vue、android、web 框架: Vue3+Spring Boot3) ,介面功能(三 )JavaMySqlAPPVueAndroidWeb框架Spring Boot
- Spring 對檔案上傳下載的支援(Spring boot實現)Spring Boot
- Spring--Java配置SpringJava
- Java Development Without SpringJavadevSpring
- mongodb的java驅動與spring的整合MongoDBJavaSpring
- 說說Java裡的equals(上)Java
- spring boot基於Java的容器配置Spring BootJava
- Java獲取Spring的各種物件JavaSpring物件
- Java Spring的 JavaConfig 註解JavaSpring
- Java Spring AOP的兩種配置方式JavaSpring
- Spring Boot(十七):使用 Spring Boot 上傳檔案Spring Boot
- Spring 自定義註解(上)Spring
- spring boot 圖片上傳Spring Boot
- 【spring】迴圈依賴 Java Vs SpringSpringJava
- JAVA後端面試《Spring》Java後端面試Spring
- Java Web之Spring BootJavaWebSpring Boot
- Java Spring刪除cookieJavaSpringCookie
- java spring 框架學習JavaSpring框架