Spring Boot 2.4 正式發布,重大調整!!!


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

昨天又有粉絲留言說 Spring Boot 2.4.0 已經發布了:

我了個去,棧長趕緊跑到 Spring Boot 官網看了下,果然 2.4.0 了,我頓時傻眼了,又得寫文章了,看來我消息還是稍微有點滯后了…

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技術棧第一時間推送。

另外,棧長每天都會在朋友圈分享一些技術文章和最新技術資訊,感興趣的可以加我微信:jszcoding,成為我的好友,一起進步、共同學習,微信好友坑位有限哦,快來和我成為好友吧!

最后,大家覺得本文有用的話,動動小手,給棧長來個小小的在看、轉發唄,原創不易,需要你的鼓勵哦~

版權申明:本文系公眾號 "Java技術棧" 原創,原創實屬不易,轉載、引用本文內容請注明出處,禁止抄襲、洗稿,請自重,尊重他人勞動成果和知識產權。

近期熱文推薦:

1.Java 15 正式發布, 14 個新特性,刷新你的認知!!

2.終於靠開源項目弄到 IntelliJ IDEA 激活碼了,真香!

3.我用 Java 8 寫了一段邏輯,同事直呼看不懂,你試試看。。

4.吊打 Tomcat ,Undertow 性能很炸!!

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM