天天看點

Spring Boot 2.4版本前後的分組配置變化及對多環境配置結構的影響

前幾天在 《Spring Boot 2.4 對多環境配置的支援更改》 一文中,給大家講解了Spring Boot 2.4版本對多環境配置的配置變化。除此之外,還有一些其他配置變化,是以今天我們就繼續講講其他的更新内容!

spring.profiles.include

對于這個配置項,你是否熟悉呢?從字面意思也不難了解,應該就是用來引入一些其他配置的配置(因為有個include嘛),實際作用也确實如此!

當我們的應用有很多配置資訊的時候,比如當用到了很多中間件MySQL、Redis、MQ等,每個中間件的配置都是一大串的,那麼這個時候我們為了配置更簡潔一些,可能就會對其做分組。

如果你有用過這樣的配置方式,那麼在更新2.4版本的時候一定要注意,因為原來的配置方法會失效!

https://blog.didispace.com/spring-boot-learning-24-1-5/#2-4%E4%B9%8B%E5%89%8D%E7%9A%84%E5%88%86%E7%BB%84%E9%85%8D%E7%BD%AE 2.4之前的分組配置

先來看看2.4版本之前的分組配置,我們用下面這個例子來介紹:

spring:
  profiles:
    active: "dev"

---
spring.profiles: "dev"
spring.profiles.include: "dev-db,dev-mq"

---
spring.profiles: "dev-db"

db: dev-db.didispace.com

---
spring.profiles: "dev-mq"

mq: dev-mq.didispace.com      

其中:

  1. 第一個

    spring.profiles.active: dev

    ,代表預設激活

    dev

    配置
  2. 第二段

    dev

    配置中使用了

    spring.profiles.include

    來引入其他配置資訊,這裡模拟一下一個是dev的db配置,一個是dev的mq配置。在2.3和之前版本的時候,我們通常就是這樣來分組配置不同中間件的。
spring.profiles: "dev"
spring.profiles.include: "dev-db,dev-mq"      

文末我們提供一個樣例工程,你可以通過修改spring boot版本到2.3和配置資訊使用上面的樣例,來啟動應用看看這種配置效果。不出意外,你可以在啟動日志開頭,看到激活的配置資訊如下:

The following profiles are active: dev,dev-db,dev-mq      

同時激活了dev、dev-db、dev-mq三組配置,include是生效的。

https://blog.didispace.com/spring-boot-learning-24-1-5/#2-4%E7%9A%84%E5%88%86%E7%BB%84%E9%85%8D%E7%BD%AE 2.4的分組配置

在更新spring boot到2.4之後,再啟動之前的應用,你會發現配置就沒有生效了,這裡不僅是因為

spring.profiles

失效的原因,即使我們将其都修改為

spring.config.activate.on-profile

,也依然無法激活dev-db和dev-mq的配置。因為在2.4版本之後,我們需要使用spring.profiles.group來配置了,同時組織結構也發生了變化。

可以嘗試把配置修改成如下格式:

spring:
  profiles:
    active: "dev"
    group:
      "dev": "dev-db,dev-mq"
      "prod": "prod-db,prod-mq"

---
spring:
  config:
    activate:
      on-profile: "dev-db"

db: dev-db.didispace.com

---
spring:
  config:
    activate:
      on-profile: "dev-mq"

mq: dev-mq.didispace.com

---
spring:
  config:
    activate:
      on-profile: "prod-db"

db: prod-db.didispace.com

---
spring:
  config:
    activate:
      on-profile: "prod-mq"

mq: prod-mq.didispace.com      

啟動應用可以在日志開頭看到激活的配置組(預設激活的是dev,是以對應的就是dev-db和dev-mq):

The following profiles are active: dev,dev-db,dev-mq      

修改

spring.profiles.active: "prod"

直接切換到另外一個環境。

重新開機應用可以在日志開頭看到激活的配置組:

The following profiles are active: prod,prod-db,prod-mq      

可以看到,在2.4版本的配置中,不同環境的配置定義都在第一段預設配置中了,所有的環境定義都轉移到了

spring.profiles.group

的key字段(上面配置了

dev

prod

),value字段則代表了每個環境需要加載的不同配置分組。

回憶一下我們在

中提到的多環境配置,是不是不同環境的配置辨別都集中定義在了每個

spring.config.activate.on-profile

裡。而這次分組的配置改變,讓激活配置、環境配置集中到了預設配置裡,其他的profile定義是環境+配置分組的組合内容。

對于這樣的調整,最直覺的感受就是選擇環境的時候,我不需要往下找有哪些profile就能知道有哪些可選項了,還是友善不少。那麼你對這樣的配置調整怎麼看呢?歡迎留言讨論!

https://blog.didispace.com/spring-boot-learning-24-1-5/#%E4%BB%A3%E7%A0%81%E7%A4%BA%E4%BE%8B 代碼示例

本文的相關例子可以檢視下面倉庫中的

chapter1-3

目錄:

如果您覺得本文不錯,歡迎Star支援,您的關注是我堅持的動力!

https://blog.didispace.com/spring-boot-learning-24-1-5/#%E7%9B%B8%E5%85%B3%E9%98%85%E8%AF%BB 相關閱讀