Spring Boot 3.4 正式釋出,王炸級更新!

Java技术栈發表於2024-11-27

大家好,我是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.argumentsspring.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最新版)

覺得不錯,別忘了隨手點贊+轉發哦!

相關文章