重磅!Spring Boot 2.6 正式釋出,一大波新特性,看完我徹底躺平了。。
Spring Boot 2.6.0 來了
太猛了!Spring Boot 2.5.6 釋出不到一個月,Spring Boot 又接連發布了三個版本:
- Spring Boot 2.6.0(最新)
- Spring Boot 2.5.7
- Spring Boot 2.4.13
後面兩個版本都是修復 bug 版本,2.6.0 才是硬菜。。
先給大家奉上幾個版本的 Maven 依賴:
Spring Boot 2.6.0:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.0</version> <type>pom</type> </dependency>
Spring Boot 2.5.7:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.7</version>
<type>pom</type>
</dependency>
Spring Boot 2.4.13:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.13</version> <type>pom</type> </dependency>
需要注意的是,2.4.x 版本開始版本號不帶 .RELEASE
字尾了!
棧長之前整理了 Spring Boot 的最新版本情況:
版本 | 釋出時間 | 停止維護時間 |
---|---|---|
2.7.0 | 2022/05 | - |
2.6.0 | 2021/12/18 | - |
2.5.x | 2021/05/20 | 2023/02/20 |
2.4.x | 2020/12/12 | 2022/08/12 |
2.3.x | 2020/05/15 | 2022/02/15 |
2.2.x | 2019/10 | 已停止維護 |
2.1.x | 2018/10 | 已停止維護 |
2.0.x | 2018/03 | 已停止維護 |
1.5.x | 2017/01 | 已停止維護 |
可以看到,Spring Boot 2.6.0 本計劃在今年 12 月釋出的,沒想到居然提前一個月釋出了,還挺突然的。。
廢話少說,重點來看下 Spring Boot 2.6.0 都更新了什麼鬼?
Spring Boot 2.6.0 新特性
1、預設禁止迴圈引用
我們都知道,如果兩個 Bean 互相注入對方就會存在迴圈引用問題,如下程式碼所示:
UserService:
/**
* 作者:棧長
* 來源微信公眾號:Java技術棧
*/
@Service
public class UserService {
@Autowired
LogService logService;
}
LogService:
/**
* 作者:棧長
* 來源微信公眾號:Java技術棧
*/
@Service
public class LogService {
@Autowired
UserService userService;
}
這兩個 Bean 互相引用對方,就是迴圈引用了。
現在,2.6.0 這個版本已經預設禁止 Bean 之間的迴圈引用,如果存在迴圈引用就會啟動失敗報錯:
解決方案:
1)整改業務,清理掉所有存在迴圈引用的 Bean;
2)設定允許迴圈引用:
spring:
main:
allow-circular-references: true
也可以通過 SpringApplication 和 SpringApplicationBuilder 設定 ,如:
/**
* 作者:棧長
* 來源微信公眾號:Java技術棧
*/
public static void main(String[] args) {
SpringApplication application = new SpringApplication(Application.class);
// 允許迴圈引用
application.setAllowCircularReferences(true);
application.run(args);
}
2、支援 Cookie SameSite 屬性
現在可以使用 server.session.cookie.same-site
屬性在 servlet 應用程式的會話 cookie 上配置 SameSite
屬性,這個適用於自動配置的 Tomcat、Jetty 和 Undertow 應用伺服器,自定義的尚不可知。
server.session.cookie.same-site
支援的三個配置:
SameSite 參考值說明:
- None(關閉模式,必須同時設定 Secure)
- Lax(寬鬆模式,允許部分第三方 Cookie,如:Get 表單請求、連結跳轉等)
- Strict(嚴格模式,完全禁止第三方 Cookie,URL 一致時才傳送 Cookie)
SameSite 掃盲:
SameSite 是瀏覽器針對 Cookie 新增的屬性,主要用來限制第三方 Cookie,以防止 CSRF 攻擊。
如 Google 搜尋的響應頭:
另外,如果你想將 SameSite
屬性應用於其他 cookie,可以使用 CookieSameSiteSupplier
介面。
更多細節可以參考:
3、響應式應用伺服器會話屬性
響應式應用伺服器支援的會話屬性已在此版本中擴充套件。
以前是在 spring.webflux.session
下,現在在 server.reactive.session
下,並且提供與 servlet 版本相同的屬性。
4、支援自定義脫敏規則
Spring Boot 現在可以清理 /env
和 /configprops
端點中存在的敏感值。
另外,還可以通過新增型別為 SanitizingFunction 的 @Bean 類來配置自定義清理規則。這個感覺挺重要的,不能在端點中顯示敏感資訊的,後面棧長研究下再分享,關注公眾號 Java技術棧,第一時間推送。
5、重要端點變更
環境變數 /env
端點已經預設不開放了,可以通過以下配置開啟:
management.info.env.enabled = true
另外,Spring Boot 下的 /info
端點現在可以公開 Java 執行時資訊了,如以下示例 java
節點所示:
{ "java": { "vendor": "BellSoft", "version": "17", "runtime": { "name": "OpenJDK Runtime Environment", "version": "17+35-LTS" }, "jvm": { "name": "OpenJDK 64-Bit Server VM", "vendor": "BellSoft", "version": "17+35-LTS" } }}
設定方法:
management.info.java.enabled = true
6、構建資訊屬性排除
現在可以從 Spring Boot Maven 或 Gradle 外掛生成的 build-info.properties 檔案中排除特定屬性。
比如,排除 Maven 的 version 屬性:
<configuration> <excludeInfoProperties> <excludeInfoProperty>version</excludeInfoProperty> </excludeInfoProperties></configuration>
7、 Redis 連線池
當 commons-pool2
在類路徑下時,Redis(包括:Jedis 和 Lettuce)支援自動開啟連線池。
也可以設定禁用連線池:
spring.redis.jedis.pool.enabled = false
或
spring.redis.lettuce.pool.enabled = false
8、WebTestClient 測試
現在可以使用 WebTestClient 在 Mock 環境中測試 WebFlux 應用,也可以對實時伺服器測試任何 Spring Web 應用程式。
這是一個什麼樣的測試呢?為什麼又搞這個測試?這個後面棧長有時間研究下再分享,關注公眾號 Java技術棧,第一時間推送。
9、支援 Log4j2 複合配置
現在支援 Log4j2 的複合配置,可以通過 logging.log4j2.config.override
引數來指定覆蓋主日誌配置檔案的其他日誌配置檔案。
10、依賴升級
官方專案升級到新版本:
- Spring Security 5.6
- Spring Data 2021.1
- Spring HATEOAS 1.4
- Spring Kafka 2.8
- Spring AMQP 2.4
- Spring Session 2021.1.0
第三方依賴升級到新版本:
- Apache Kafka 3.0
- Artemis 2.19
- Cassandra Driver 4.13
- Commons DBCP 2.9
- Commons Pool 2.11
- Couchbase Client 3.2.2
- Elasticsearch 7.15
- Flyway 8.0.5
- Hibernate 5.6
- JUnit Jupiter 5.8
- Jedis 3.7
- Kafka 3.0
- Kotlin 1.6
- Liquibase 4.5
- Micrometer 1.8
- Mockito 4.0
- MongoDB 4.4
- Postgresql 42.3
- QueryDSL 5.0
- SnakeYAML 1.29
- Thymeleaf Layout Dialect 3.0
- .....
11、棄用和刪除項
1)AbstractDataSourceInitializer 類已被棄用,取而代之的是 DataSourceScriptDatabaseInitializer。另外,AbstractDataSourceInitializer 的子類也已被棄用,取而代之的是新的基於 DataSourceScriptDatabaseInitializer 的類。
2)SpringPhysicalNamingStrategy 類已被棄用,取而代之的是 Hibernate 5.5 的 CamelCaseToUnderscoresNamingStrategy 類。
3)AbstractApplicationContextRunner 類中的三個方法已被棄用,取而代之的是新的基於 RunnerConfiguration 的類。
4)SpringApplicationRunListener 中的 started
和 running
方法已被棄用,取而代之的是接受 Duration 引數的新方法:
引數是有了,方法裡面怎麼沒用到?什麼鬼。。這可能是為下個版本徹底移除做伏筆吧!
5)同第 4)點,ApplicationStartedEvent 和 ApplicationReadyEvent 中的建構函式也已被替換為接受 Duration 引數的版本:
6)EnvironmentEndpoint.sanitize 被標識棄用了。
7)Oracle 資料庫驅動程式的依賴管理已得到簡化,Oracle 驅動包 GroupID com.oracle.ojdbc
需要升級為 com.oracle.database.jdbc
,現在已經刪除了對前者的依賴管理。
另外,在 Spring Boot 2.4 版本當中標識為棄用的類、方法和屬性已在此版本中徹底刪除,這個升級就要注意了,如果用了應該會出現編譯錯誤。
總結
除了上面列出的更改之外,在 Docker 映象、健康檢查、指標監控上都有增強、另外還有許多小的調整和改進,這裡就不一一介紹了,可以看下官方釋出說明:
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6-Release-Notes
Spring Boot 2.6.0 變動真的還挺多的,看看大家都用到了啥,再考慮升級,如果只是學習研究使用,可以隨便升,但如果是生產環境,請慎重考慮了,個人建議沒有必要跟最新版本。。
Spring Boot 現在已經成為了實事上的腳手架框架了,讓學習和開發變得更簡單,同時也讓我感覺技術更新實在太快了啊,所以我們也要不斷保持學習,不然也會跟著淘汰。
如果你還沒用過 Spring Boot,今天我就送你一份 《Spring Boot 學習筆記》這個很全了,包括底層實現原理及程式碼實戰,非常齊全,助你快速打通 Spring Boot 的各個環節。
往期 Spring Boot 教程及示例原始碼整理:
最後,你們用的哪個 Spring Boot 版本呢?
歡迎來投票統計看下!
好了,今天的分享就到這裡了,後面棧長會分享更多好玩的 Java 技術和最新的技術資訊,關注公眾號Java技術棧第一時間推送,我也將主流 Java 面試題和參考答案都整理好了,在公眾號後臺回覆關鍵字 "面試" 進行刷題。
最後,覺得我的文章對你用收穫的話,動動小手,給個在看、轉發,原創不易,棧長需要你的鼓勵。
版權宣告: 本文系公眾號 "Java技術棧" 原創,原創實屬不易,轉載、引用本文內容請註明出處,抄襲者一律舉報+投訴,並保留追究其法律責任的權利。
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2021最新版)
2.別在再滿屏的 if/ else 了,試試策略模式,真香!!
3.臥槽!Java 中的 xx ≠ null 是什麼新語法?
4.Spring Boot 2.5 重磅釋出,黑暗模式太炸了!
覺得不錯,別忘了隨手點贊+轉發哦!