Spring Boot 2.4.0 發佈,配置文件重大調整,不要亂升級!!

前段時間 Spring Boot 2.4.0 發佈了,棧長做了一個新特性全盤解讀,其中介紹了一個很重要的變革,那就是配置文件。java

配置文件但是每一個框架的核心,不得不搞清楚,因此,這篇棧長就帶你們深刻實戰了解下 Spring Boot 2.4 配置文件都有哪些具體變動,以及如何遷移,已助你決定是否遷移到 Spring Boot 2.4。mysql

概要

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

若是你的應用工程只有一個簡單的 application.properties 或 application.yml 文件,則能夠進行無縫升級到 Spring Boot 2.4.0。github

可是,若是你的配置較爲複雜,好比說有指定 profile 的參數,或者有基於 profile 激活的參數,要使用新功能就須要進行一些更改。spring

更多細節可參考:sql

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

變動細節

一、YAML 配置排序變動

若是你在 application.yml 配置中啓用了多套配置(即用 --- 分隔的多套配置),那就須要注意了,由於在 Spring Boot 2.4 中,配置參數是按在配置文件中定義的順序前後進行加載的,由於在 Spring Boot 2.3 及以前的版本中,各個配置參數是基於 "profile" 的激活的順序來加載的,後面激活加載的參數會覆蓋以前的。app

若是你有一些配置參數,它們之間又是互相覆蓋,那就要確保所須要的參數要放在文件最後。框架

如在 Spring Boot 2.3 中:ide

spring:
  profiles:
    active:
      - prod
      - prodmq
      - proddb

---
spring:
  profiles: prod
  
env: prod  
  
---
spring:
  profiles: proddb

env: proddb

---
spring:
  profiles: prodmq

env: prodmq

Spring Boot 基礎構建及 profile 基本介紹這裏就不介紹了,關注公衆號Java技術棧回覆關鍵字 "boot",能夠閱讀我寫的幾十篇往期實戰文章。

Spring Boot 教程和示例代碼已上傳到 Github:

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

回到上面的配置,若是同時啓用多個 profile 的話,後面的會覆蓋前面的,即 proddb 裏面的配置參數會覆蓋 prodmq 的,因此 env 的值爲:proddb。

而若是升級到了 Spring Boot 2.4,env 的值則爲:prodmq,由於按順序加載的話 prodmq 中的 env 在配置文件中最下方。

因此,若是升級到 Spring Boot 2.4,就須要檢查 "profile" 這些配置參數之間的關係,可能還須要對 YAML 中的配置從新排序。

二、Profile 配置覆蓋變動

若是你使用了 JAR 外部化配置,而且也使用了基於 "profile" 的特定配置文件,那你就要檢查下配置是否按預期加載了。

由於在以前的版本中,JAR 包外部的 application.properties 配置文件不會覆蓋 JAR 包裏面的基於 "profile" 的 application-xxxprofile.properties 配置文件。

從 Spring Boot 2.4 開始,外部化配置參數會覆蓋內部的配置參數(不論是否基於 "profile" 激活),這個也是修復 Spring Boot 上的的一個 Issue:

https://github.com/spring-projects/spring-boot/issues/3845

這個問題的就是指 JAR 包外部的應用程序參數應優先於 JAR 包內部的特定激活的配置參數。

三、Profile 配置參數變動

若是你使用了 spring.profiles 屬性指定了多套 YMAL 配置文件,如今須要使用新參數替代:

spring.config.activate.on-profile

配置示例:

---
spring.config.activate.on-profile: dev

env: dev

server:
  port: 8080

---
spring.config.activate.on-profile: test

env: test

server:
  port: 8081

---
spring.config.activate.on-profile: prod

env: prod

server:
  port: 8082

---
spring.config.activate.on-profile: proddb

db:
  name: mysql

env: proddb

---
spring.config.activate.on-profile: prodmq

mq:
  address: localhost

env: prodmq

和以前的邏輯同樣,能夠繼續使用 spring.profiles.active 來激活特定的 profiles 列表,或者也可使用表達式激活,如:prod & cloud,可是不能和 spring.config.activate.on-profile 結合使用。

另外,若是你以前使用了 spring.profiles.includespring.profiles 結合使用,就須要使用新的 "profile group" 特性了。

配置 profile group 組示例:

spring:
  profiles:
    active:
      - prodall
    group:
      prodall:
        - prod
        - prodmq
        - proddb

這樣就定義了一個 "prodall" 組,包含了 prod, proddb, prodmq 三個 profile,同時在配置文件中直接使用 spring.profiles.active 來激活 "prodall" 組,這樣就同時激活了 prod, proddb, prodmq。

四、迴歸傳統模式

若是你想繼續使用 Spring Boot 2.3 的配置文件邏輯,或者還沒準備好遷移到 Spring Boot 2.4,也能夠經過在 application.properties 或者 application.yml 配置文件中添加如下參數回到傳統模式:

spring.config.use-legacy-processing = true

若是不指定這個參數爲:true,那麼在 Spring Boot 2.4 中就是默認新的配置文件處理邏輯。

總結

總結下來,我的感受某些變動着實沒什麼卵用,但也不得不跟上它的節奏。

因此你們必定要注意了,遷移到 Spring Boot 2.4,須要注意文中的配置變動細節,必定要對全部變動內容作調整,否則參數加載會受到影響。

本節全部實戰源代碼示例已上傳至 Github:

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

好了,今天的分享就到這裏了,單看官方文檔還不是很清楚,棧長也是對配置升級的細節作了各個實踐才明白其中的奧妙,但願對你們有幫助。

歡迎你們 Star 關注,後續會不斷更新。

學習更多 Spring Boot 教程,請關注公衆號Java技術棧,後面棧長還會繼續推送一些 Spring Boot 2.4 新特性實戰文章。在公衆號後臺回覆:boot,歷史 Spring Boot 教程我也都整理好了。

最後,別忘了點在看、轉發哦,須要你的鼓勵~

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

近期熱文推薦:

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

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

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

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

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

以爲不錯,別忘了隨手點贊+轉發哦!

相關文章
相關標籤/搜索