1. 程式人生 > 其它 >重磅!Spring Boot 2.6 正式釋出,一大波新特性,看完我徹底躺平了。。

重磅!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);
}

現在可以使用 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 介面。

更多細節可以參考:

https://docs.spring.io/spring-boot/docs/2.6.0/reference/html//web.html#web.servlet.embedded-container.customizing.samesite

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 中的 startedrunning 方法已被棄用,取而代之的是接受 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 教程及示例原始碼整理:

https://github.com/javastacks/javastack

最後,你們用的哪個 Spring Boot 版本呢?

歡迎來投票統計看下!

好了,今天的分享就到這裡了,後面棧長會分享更多好玩的 Java 技術和最新的技術資訊,關注公眾號Java技術棧第一時間推送,我也將主流 Java 面試題和參考答案都整理好了,在公眾號後臺回覆關鍵字 "面試" 進行刷題。

最後,覺得我的文章對你用收穫的話,動動小手,給個在看、轉發,原創不易,棧長需要你的鼓勵。

版權宣告: 本文系公眾號 "Java技術棧" 原創,原創實屬不易,轉載、引用本文內容請註明出處,抄襲者一律舉報+投訴,並保留追究其法律責任的權利。

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2021最新版)

2.別在再滿屏的 if/ else 了,試試策略模式,真香!!

3.臥槽!Java 中的 xx ≠ null 是什麼新語法?

4.Spring Boot 2.5 重磅釋出,黑暗模式太炸了!

5.《Java開發手冊(嵩山版)》最新發布,速速下載!

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