最新消息,Spring Boot 一次性發布了 3 個版本:
-
3.3.0
-
3.2.6
-
3.1.13
Spring Boot 3.3 正式發布了,3.1.x 在前幾天也停止維護了。
最新的支持版本如下:
從路線圖可以看到每個版本的終止時間,每個版本的生命周期只有一年。
Spring Boot 進入了全新的 3.x 時代了,3.1.x 和 3.0.x 也相繼停止維護了,商業支持的版本也只有 2.7+ 了,2.6.x 以下的版本徹底退出歷史舞臺。。
Spring Boot 3.3.0 新特性
1、最低環境要求
Spring Boot 3.0.0 開始支持并最低要求 Java 17,Spring Boot 3.1.5 開始支持 Java 21 了。
對 Java 開發環境的要求對比表:
Spring Boot | JDK | Spring | Maven | Gradle |
---|---|---|---|---|
3.3.0 | 17 ~ 22 | 6.1.8+ | 3.6.3+ | 7.5+,8.x |
3.2.0 | 17 ~ 21 | 6.1.1+ | 3.6.3+ | 7.5+,8.x |
3.1.0 | 17 ~ 20 | 6.0.9+ | 3.6.3+ | 7.5+,8.x |
3.0.0 | 17 ~ 19 | 6.0.2+ | 3.5+ | 7.5+ |
2.7.12 | 8 ~ 20 | 5.3.27+ | 3.5+ | 6.8.x, 6.9.x, 7.x, 8.x |
支持 Java 8 的最后一個 Spring Boot 2.x 系列版本已經退伍啦,Java 17 的新時代到來。
如果你還停留在 Java 8 就 OUT 了,過去一兩年,Java 8 采用率腰斬,Java 17 暴漲 430%!!
2、CDS 支持(可縮短啟動時間)
什么是 CDS?
CDS 全稱為:Class Data Sharing,即類數據共享,它是 JVM 的一項功能,它可以在多個 JVM 之間共享類,從而幫助減少 Java 應用程序的啟動時間和內存占用。
CDS 可以生成一個稱為共享類歸檔(Shared Class Archive)的文件,即 *.jsa 文件,該文件包含預處理的類元數據,它會在 JVM 啟動時加載到內存,以便 JVM 可以快速訪問這些類元數據,而不需要在啟動時重新加載和解析這些類信息,從而大大減少了啟動時間。
使用方式如下:
$?java?-Djarmode=tools?-jar?test-app.jar?extract?--destination?application
$?cd?application
$?java?-XX:ArchiveClassesAtExit=application.jsa?-Dspring.context.exit=onRefresh?-jar?test-app.jar
這里它便會創建一個?application.jsa
?文件,只要應用程序未更新,就可以重復使用該文件。如果要使用緩存,需要在啟動應用程序時添加一個額外的參數:
$?java?-XX:SharedArchiveFile=application.jsa?-jar?test-app.jar
有了這個特性支持,Spring Boot 應用程序的啟動速度會大大提升,要直接起飛了。
3、Websockets 支持虛擬線程
Spring Boot 3.3.0 添加了 Websockets 對虛擬線程支持。
什么是虛擬線程?
虛擬線程是一種成本低廉、輕量級的用戶模式的線程實現,也就是傳說中的 “協程”,它可以充分利用可用硬件,大幅減少編寫、維護和監測高并發應用的工作量。
我們都知道使用線程是要十分注意的,因為線程的創建、銷毀都十分消耗系統資源,所以有了線程池,但這還不夠,因為線程的數量是有限的,線程會阻塞操作系統線程,無法盡可能的提高吞吐量。
因為使用線程的成本很高,所以才會有了虛擬線程,它是用戶態線程,成本是相當低廉的,調度也完全由用戶進行控制(JDK 中的調度器),它同樣可以進行阻塞,但不用阻塞操作系統線程,充分提高了硬件利用率,高并發也上了一個量級,從而實現了高吞吐量。
Java 19 初次引入虛擬線程,在 Java 21 中正式轉正生產可用。
Spring Boot 3.1.5 做了對 Java 21 的兼容,Spring Boot 3.2.0 正式可以支持 Java 21 中的虛擬線程了,只需要添加以下配置即可:
spring.threads.virtual.enabled = true
4、配置文件支持 Base64
配置文件增強了,現在可以在 property 和 YAML 配置文件文件中將資源加載為 Base64 格式的值了,即使用?base64:
?前綴將資源加載為 Base64 編碼的文本值,這對于 SSL 證書等資源非常有用。
如下面配置示例:
spring:ssl:bundle:pem:mybundle:keystore:certificate:?"base64:Ts9tL8UYRUdJTi..."private-key:?"base64:Yk1dIEF0dHJpYn..."
5、支持 SBOMs
支持 SBOMs,并添加了一個 SBOM 端點。
SBOM 全稱為:Software Bill of Materials,即軟件材料清單,它用于提供軟件組件的清單和詳細信息,包括其涉及到的開源和第三方依賴、庫、工具等。
SBOM 的主要目的是提高軟件的透明度,幫助開發人員、安全團隊理解軟件中包含的具體內容,從而更好地管理安全風險、許可證合規性和依賴項的更新。
6、其他
1)可觀察性增強了,主要添加了對?Micrometer?的?@SpanTag
?注解的支持,新增了一個?InfoContributor
?以及對 Prometheus 1.x 支持。
2)Spring Security 增強了,主要添加了對?JwtAuthenticationConverter
?的自動配置。
3)服務連接支持增強了,主要添加了對Apache ActiveMQ Artemis 和 LDAP 的服務連接支持。
4)容器鏡像增強了,主要添加了對 Docker Compose 對?Bitnami?容器鏡像的支持。
5)大量 Spring 庫和第三方類庫都得到了更新,還有一些廢除項。
總結
Spring Boot 3.3 這個版本的變化還挺大的,很多功能都得到了增強,做技術的真要時刻保持對新技術的渴望啊,不然都跟不上時代的步伐了。