1. 程式人生 > >Spring Boot 2.4 正式釋出,重大調整!!!

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

大家週末愉快啊,[Spring Boot 2.3.5](https://mp.weixin.qq.com/s/BhNofKQRVRBp82AOJgjctw) 沒釋出幾天,你看,還是 1 周前釋出的: ![](https://img2020.cnblogs.com/other/1218593/202011/1218593-20201114154839499-1943853818.png) 昨天又有粉絲留言說 Spring Boot 2.4.0 已經發布了: ![](https://img2020.cnblogs.com/other/1218593/202011/1218593-20201114154839809-1426602064.png) 我了個去,棧長趕緊跑到 Spring Boot 官網看了下,果然 2.4.0 了,我頓時傻眼了,又得寫文章了,看來我訊息還是稍微有點滯後了… ![](https://img2020.cnblogs.com/other/1218593/202011/1218593-20201114154840165-1629762234.png) 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 依賴即可: ``` ``` 以下為對應的 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 個新特性,重新整理你的認知!!](http://www.javastack.cn/article/2020/java15-released/) 2.[終於靠開源專案弄到 IntelliJ IDEA 啟用碼了,真香!](http://www.javastack.cn/article/2020/intellij-idea-by-open-source-project/) 3.[我用 Java 8 寫了一段邏輯,同事直呼看不懂,你試試看。。](http://www.javastack.cn/article/2020/java-8-optional-map-do-you-know/) 4.[吊打 Tomcat ,Undertow 效能很炸!!](http://www.javastack.cn/article/2020/undertow-introduce-with-spring-boot/) 5.[《Java開發手冊(嵩山版)》最新發布,速速下載!](http://www.javastack.cn/article/2020/alibaba-release-java-develop-rules-songshan/) 覺得不錯,別忘了隨手點贊+轉