大家好,我是R哥。
最新訊息,Spring Boot 一次性發布了 6 個版本:
- 3.4.0
- 3.3.6
- 3.2.12
- 3.1.14
- 3.0.18
- 2.7.23
Spring Boot 3.4 正式釋出了,3.2.x 在前幾天也停止維護了,很神奇的是,3.1.x 及以下的停更版本居然也釋出 bug 更新包了。
最新的支援版本如下:
從路線圖可以看到每個版本的終止時間,每個版本的生命週期只有一年。
Spring Boot 進入了全新的 3.3+ 時代了,3.2.x 及之前的版本也都停止維護了,商業支援的版本也只有 2.7+ 了,2.6.x 以下的版本徹底退出歷史舞臺,技術變革太快了。。
Spring Boot 3.4.0 新特性
1、最低環境要求
Spring Boot 3.0.0 開始支援並最低要求 Java 17,目前的新版本也陸續開始支援 Java 21 ~ 23 了。
對 Java 開發環境的要求對比表:
Spring Boot | JDK | Spring | Maven | Gradle |
---|---|---|---|---|
3.4.0 | 16 ~ 23 | 6.2.0+ | 3.6.3+ | 7.6.4+,8.4+ |
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%!!
R哥製作的《Java 新特性實戰課》都可以報名學起來,好課不貴,199 元永久學習,如後續出了 Java 21 及更多版本新內容都能免費更新。
2、結構化日誌
什麼是結構化日誌?
一般的日誌都是 “非結構” 化的,也就是一段沒有任何 “結構” 的日誌文字字串,比如我們在系統中常見的日誌資訊:
2024-11-25 10:41:05:347 INFO ...
雖然包含了所有關鍵的資訊,但是想要提取其中的特定資訊就非常困難,需要解析和搜尋這段字串。
而結構化日誌則是一段有明確定義的結構的字串,可讀性好,通用是 JSON 格式,如以下日誌:
{
"timestamp": "2024-11-25 10:41:05:347",
"level": "INFO",
...
}
這樣獲取日誌資訊是不是方便多了?
Spring Boot 中的結構化日誌
Spring Boot 3.4 支援結構化日誌記錄,並支援以下開箱即用的 JSON 格式:
- Elastic Common Schema (ecs)
- Graylog Extended Log Format (gelf)
- Logstash(logstash)
啟用結構化日誌記錄配置:
引數 | 說明 |
---|---|
logging.structured.format.console | 用於控制檯輸出 |
logging.structured.format.file | 用於檔案輸出 |
配置示例:
logging:
structured:
format:
console: ecs
file: ecs
結構化日誌配置支援上面所說的 ecs、gelf、logstash 日誌。
推薦看看我寫的更多 Spring Boot 教程:https://www.javastack.cn/spring/spring-boot/
3、定義附加的 Bean
Spring Boot 3.4 開始,當型別匹配時,基於 Bean 的條件現在將忽略任何不是預設候選者的 Bean。
透過宣告 bean 不是預設候選者,如:
@Bean(defaultCandidate = false)
public class Xxx {
}
然後在定義自動配置型別的 bean 時,如果存在相同型別的 bean,它就會被忽略,從而不會導致自動配置的 bean 註冊失敗。
比如在同一個應用程式中要使用兩個資料來源 Bean,或者其他兩個相同型別的 Bean 時,這樣就特別有用,還能簡化配置。
Spring Boot 最新最全的實戰程式碼已上傳 Github:
https://github.com/javastacks/spring-boot-best-practice
4、擴充套件虛擬執行緒
Spring Boot 3.4 開始,如果啟用了虛擬執行緒,以下元件將使用虛擬執行緒:
- OtlpMeterRegistry
- Undertow web server
另外,透過 Spring Integration 整合的任務排程器(TaskScheduler)現在也是虛擬執行緒感知的,即使在 @EnableScheduling
在沒有開啟的狀態下。
5、Docker Compose 和 Testcontainers 改進
Docker Compose 現在支援多個 Docker Compose 配置檔案,並且新增了幾個新的命令列引數:
-
spring.docker.compose.start.arguments
和spring.docker.compose.stop.arguments
引數可用於指定在啟動和停止服務時傳遞給 Docker Compose 子命令的其他命令列引數。 -
spring.docker.compose.arguments
引數支援傳遞引數給 Docker Compose。
另外,Testcontainers 測試容器也得到了各種改進,比如新增了對 org.testcontainers.kafka.KafkaContainer
、Redis Stack 和 Redis Stack Server 的支援。
6、Actuator 增強
可插拔的 Actuator 暴露器
Spring Boot 3.4 支援擴充套件 Spring Boot 以可插拔的方式公開 Actuator 端點,並且新增了一個 EndpointExposureOutcomeContributor
介面,它會影響到 @ConditionalOnAvailableEndpoint
註解的條件控制。
此擴充套件可以更輕鬆地提供類似於我們現有的 Cloud Foundry 支援的其他平臺整合。
SSL資訊和健康檢查
如果你使用了 SSL bundles,現在在 /actuator/info
下新增了一個新端點,用來顯示 SSL 資訊,比如證書有效期、頒發者、主題等。
這個端點還能顯示即將過期的證書,這樣就能提醒我們不定期更新證書,它還提供了一個提醒閾值配置引數:
management.health.ssl.certificate-validity-warning-threshold
另外,它還新增了監控 SSL 證書的健康檢查,如果證書無效,則會將狀態設定為中止服務(OUT_OF_SERVICE)。
計劃任務端點顯示更多資訊
計劃任務 /actuator/scheduledtask
端點現在新增了更多關於計劃任務的後設資料資訊,比如:下一次計劃執行時間、上次執行時間、狀態和異常等。
7、映象構建改進
Spring Boot 現在預設使用的是 paketobuildpacks/builder-jammy-java-tiny
,該構建器支援 ARM 和 x64 平臺開箱即用。
在 Maven 和 Gradle 外掛中新增了一個用於構建 OCI 映像的 trustBuilder
選項,它控制了 CNB 生命週期的呼叫方式,從而在使用來自不受信任來源的構建器時提供更高的安全性。
預設情況下,來自 Paketo、Heroku 和 Google 的構建器是受信任的。
在 Maven 和 Gradle 外掛中還新增了一個用於構建 OCI 映像的 imagePlatform
選項,此選項可用於指定為執行 CNB 構建包而拉取的任何 CNB 構建器、執行和構建包映像的作業系統和體系結構。
8、MockMvcTester 自動配置
支援當 AssertJ
在類路徑下時自動配置 MockMvcTester,有了 MockMvcTester,我們就能使用流式 API 定義請求和斷言。
MockMvcTester 也是 MockMvc 的替代方案,它可以代替 MockMvc 所能使用到的任何場景。
9、RestClient 和 RestTemplate
RestClient 和 RestTemplate 的自動配置,新增了對 Netty 響應式的 HttpClient
HTTP 客戶端和 JDK 的 HttpClient
HTTP 客戶端的支援。
按照優先順序分別是:
- Apache HTTP Components (
HttpComponentsClientHttpRequestFactory
) - Jetty Client (
JettyClientHttpRequestFactory
) - Reactor Netty
HttpClient
(ReactorClientHttpRequestFactory
) - JDK
HttpClient
(JdkClientHttpRequestFactory
) - Simple JDK
HttpURLConnection
(SimpleClientHttpRequestFactory
)
需要注意的是,如果在類路徑上沒有HTTP客戶端庫,這可能會導致使用 JdkClientHttpRequestFactory,而以前使用的是 SimpleClientHttpRequestFactory。
可以透過設定 spring.http.client.factory
引數來選擇特定的 HTTP 客戶端,支援的值有:http-components、jetty、reactor、jdk 和 simple。
10、優雅關機
Spring Boot 3.4 開始,現在預設啟用嵌入式 Web 伺服器的優雅關機,包括:Jetty、Rector Netty、Tomcat 和 Undertow。
如果需要恢復之前的預設行為,可以設定以下引數:
server.shutdown: immediate
11、更多
1)Spring Boot 不再依賴 OkHttp,OkHttp 的依賴也被移除了。
2)Apache HTTP 元件已更改 HttpClient
中與 HTTP/1.1 TLS 升級相關的預設值。
3)配置屬性的 Bean 驗證有變動,如果要驗證級聯到巢狀屬性,則根據需要新增 @Valid
註解。
4)當在 @Bean
方法上使用 @ConditionalOnBean
和 @ConditionalOnMissingBean
並設定 annotation
屬性時, @ConditionalOnBean
和 @ConditionalOnMissingBean
的行為已更改。
5)大量 Spring 庫和第三方類庫都得到了更新,還有一些廢除項。
總結
Spring Boot 3.4 這個版本的變化還挺大的,增加了不少實用功能,很多功能也都得到了增強,做技術的真要時刻保持對新技術的渴望啊,不然都跟不上時代的步伐了。
話說你們現在用的什麼版本呢?
Spring Boot 最新最全的實戰程式碼已上傳 Github:
https://github.com/javastacks/spring-boot-best-practice
如果你還沒用過 Spring Boot,這裡推薦下我的《Spring Boot 核心技術課》,16 個模組,幾乎涉及所有核心技術,包括底層實現原理及程式碼實戰,知識點非常齊全,助你快速打通 Spring Boot 的各個環節。
等更新到 Spring Boot 3.5+,本課程會漲價到 499 元,早訂閱,早學習,早受益。
好了,今天的分享就到這裡了,後續R哥也會繼續關注並分享更多的 Spring Boot 資訊和乾貨,關注公眾號Java技術棧第一時間推送。
版權宣告: 本文系公眾號 "Java技術棧" 原創,轉載、引用本文內容請註明出處,抄襲、洗稿一律投訴侵權,後果自負,並保留追究其法律責任的權利。
更多文章推薦:
1.Spring Boot 3.x 教程,太全了!
2.2,000+ 道 Java面試題及答案整理(2024最新版)
3.免費獲取 IDEA 啟用碼的 7 種方式(2024最新版)
覺得不錯,別忘了隨手點贊+轉發哦!