天天看點

Spring Boot 2.4 正式釋出,重大調整!!!

大家周末愉快啊,Spring Boot 2.3.5 沒釋出幾天,你看,還是 1 周前釋出的:

Spring Boot 2.4 正式釋出,重大調整!!!
昨天又有粉絲留言說 Spring Boot 2.4.0 已經釋出了:
Spring Boot 2.4 正式釋出,重大調整!!!
我了個去,棧長趕緊跑到 Spring Boot 官網看了下,果然 2.4.0 了,我頓時傻眼了,又得寫文章了,看來我消息還是稍微有點滞後了…
Spring Boot 2.4 正式釋出,重大調整!!!

Spring Boot 2.4.0 這麼快就釋出了,又是周末來給大家推送,我印象中都是周末推……

Spring Boot 更新也太快了,很多同學表示學不來了,學不動了。學不動也要學啊,不然就要被淘汰了,Java技術棧所有 Spring Boot 教程和示例源碼都上傳到 Github 了,歡迎 Star:

https://github.com/javastacks/spring-boot-best-practice

好吧,還是例行公事,接下來棧長帶大家來解讀下 Spring Boot 2.4.0 到底更新了什麼鬼?

切記!!!

這個版本不要輕易更新!!!

下面注意仔細看完哦。。。

一、支援 Java 15

Spring Boot 2.4.0 支援 Java 15 了,同時向下相容 Java 11 和 Java 8。

二、依賴更新

Spring Boot 2.4.0 更新了一些主要的 Spring 項目:

Spring AMQP 2.3

Spring Batch 4.3

Spring Data 2020.0

Spring Framework 5.3

Spring HATEOAS 1.2

Spring Integration 5.4

Spring Kafka 2.6

Spring Retry 1.3

Spring Security 5.4

Spring Session 2020.0

另外,還盡可能更新了一些第三方庫到最新穩定版本:

Artemis 2.13

AssertJ 3.18

Cassandra Driver 4.7

Elasticsearch 7.9

Flyway 7

Jersey 2.31

JUnit 5.7

Liquibase 3.10

Lettuce 6.0

Micrometer 1.6

Mockito 3.4

MongoDB 4.1

Oracle Database 19.7

Reactor 2020.0

RSocket 1.1

Undertow 2.2

……

三、配置改進

1、改進配置檔案的處理方式

Spring Boot 2.4 改進了處理 application.properties 和 application.yml 配置檔案的方式。更新後的邏輯旨在簡化和合理化外部配置的加載方式,但有些參數的組合形式卻得到了限制,更新請謹慎。

如果你的應用工程隻有一個簡單的 application.properties 或 application.yml 檔案,則可以進行無縫更新到 Spring Boot 2.4.0。

但是,如果你的配置較為複雜,比如說有指定 profile 的參數,或者有基于 profile 激活的參數,要使用新功能就需要進行一些更改。

更多細節可參考:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide

如果你想繼續使用 Spring Boot 2.3 的配置邏輯,也可以通過在 application.properties 或者 application.yml 配置檔案中添加以下參數:

spring.config.use-legacy-processing = true

2、導入配置參數改進

通過配置參數 spring.config.location 和 spring.config.import 來指定或者導入配置檔案時,如果配置檔案不存在,現在不是隻能默默地失敗了,可以通過添加 optional: 字首來辨別它是可選的。

比如我們從 /etc/config/application.properties 指定配置檔案,如果這個檔案不存在,系統就會跳過它。

spring.config.location=optional:/etc/config/application.properties

如果你想将所有指定的配置檔案都預設為可選的,可以通過 SpringApplication.setDefaultProperties(…) 來設定

spring.config.on-location-not-found=ignore 這個參數,或者将它設定在系統環境變量中。

3、支援導入配置樹

新版本的 spring.config.import 屬性還可以用于導入配置樹,通過與 Kubernetes 一起使用,配置樹是提供鍵/值對的另一種方法,每一個鍵值/對都在其自己的檔案中聲明,檔案名是鍵,檔案内容就是值。

另外,從配置樹導入的參數預設會帶一個換行符。

詳細的參考:

https://docs.spring.io/spring-boot/docs/2.4.0/reference/html/spring-boot-features.html#boot-features-external-config-files-configtree

具體的配置上的細節暫時沒有時間詳細研究了,後面有機會再詳細介紹一篇,關注公衆号Java技術棧第一時間推送。

四、新增啟動端點

Spring Boot 2.4.0 添加了一個新的啟動端點,用來顯示應用啟動有關的詳細資訊,比如可以幫助我們來診斷啟動時間比預期更長的 Spring Beans。

這個功能建立在 Spring Framwork 5.3 最近添加的應用程式啟動跟蹤特性的基礎上,感興趣的可以在 Spring 架構文檔中閱讀有關該功能的更多資訊。

https://docs.spring.io/spring-framework/docs/5.3.x/reference/html/core.html#context-functionality-startup

五、新增起源鍊(Origin Chains)

Origin 接口更新了,使用了全新的 getParent() 方法,這樣就可以提供完整的參數起源鍊,以準确顯示某一項參數的來源。

比如你在 application.properties 配置檔案中使用 spring.config.import 來導入第二個配置檔案的參數,從第二個配置檔案加載的參數的 Origin 将具有一個指向原始導入聲明的父級。

說白了就是可以看到參數從哪裡導進來的,可以通過 actuator/env 或者 actuator/configprops 端點來檢視與之相關的輸出資訊,這裡暫不詳細研究了,後面有機會再詳細介紹一篇,關注公衆号Java技術棧第一時間推送。

六、Docker 支援更新

1、鏡像釋出

Spring Boot Maven 插件的 spring-boot:build-image 指令和 Gradle 插件的 bootBuildImage 任務現在可以直接釋出 Docker 鏡像到 Docker 注冊中心了。

2、授權機制

當使用 Spring Boot 建構時,可以為建構器或者運作鏡像使用私有授權的 Docker 私有注冊中心,支援使用者名/密碼認證以及基于 Token 機制認證。

更多詳細的配置可以參考對應的插件文檔:

Maven:

https://docs.spring.io/spring-boot/docs/2.4.0/maven-plugin/reference/htmlsingle/#build-image-example-publish Gradle: https://docs.spring.io/spring-boot/docs/2.4.0/gradle-plugin/reference/htmlsingle/#build-image-example-publish

七、移除了 JUnit 5’s Vintage 引擎

Spring Boot 2.4.0 從 spring-boot-starter-test 中移除了 JUnit 5 Vintage 引擎,JUnit 5 可以通過 vintage 引擎來運作 JUnit 4 編寫的測試用例,說白了就是相容 JUnit 4 呗。

如果你不想遷移測試用例到 JUnit 5 而繼續使用 JUnit 4,添加以下 Maven 依賴即可:

<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
      

以下為對應的 Gradle 配置:

testImplementation("org.junit.vintage:junit-vintage-engine") {
    exclude group: "org.hamcrest", module: "hamcrest-core"
}      

八、其他更新

Spring Boot 2.4.0 釋出更新說明中還包括了許多其他的更新和改進,比如說在 Spring Boot 2.4.0 中辨別了在下個版本中計劃廢棄的不推薦使用的類和方法等。

以上就是 Spring Boot 2.4.0 的主要變更内容,當然還有許多釋出細節,感興趣的可以研究下這個更新說明:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.4-Release-Notes

總結

終于寫完了,又肝了一個晚上!!

可以看出 Spring Boot 2.4.0 的變更還是蠻大的,特别是在配置檔案、配置參數的處理,還有許多架構的重大版本更新。

切記不要輕易更新到這個版本,如需更新,最好是詳細看清楚變更内容,做好充分測試,以免年終獎沒了。。

關于更多的細節暫時沒時間深入研究了,後續棧長有時間再深入研究下,給大家帶來更詳細的技術文章,關注公衆号Java技術棧第一時間推送。