首頁>技術>

相信朋友們在工作中都用到了多環境配置,在啟動或打包時指定

spring.profiles.active

同時spring還提供了一個配置

spring.profiles.include

整個多環境配置的核心就是用到了這兩個配置。

在應用時,spring.profiles.include的值一般是固定的,而spring.profiles.active是可變的,具體值一般由兩種途徑指定

1. 打包時,透過maven的profile配置獲取

2. 啟動時,透過引數指定, --spring.profiles.active=dev

spring:  profiles:    active: @spring.profiles.active@    # 比如下面配置了nacos,那麼Spring會在所有jar的classes路徑下查詢application-nacos.yml, bootstrap-nacos.yml,找不到會忽略    include: all,web,business,seata,nacos  application:    name: @artifactId@

以前只知道application-nacos.yml, 並不知道原來bootstrap也可以這樣。

SpringCloud有兩種配置檔案,bootstrap.yml的載入會比較早,方便配置nacos, 然後從nacos讀取配置,而application.yml大家都比較熟悉了,用來配置具體項。

我們開始的方案是把nacos的addr和namespace放在maven的profile, 透過打包替換bootstrap.yml中的值,

spring:  profiles:    # @變數@,用來替換maven的properties的值    active: @spring.profiles.active@    include: all,web,business,seata,nacos  application:    name: @artifactId@  cloud:    nacos:      #      配置中心      config:        server-addr: @nacos.server.addr@        namespace: @nacos.namespace@        file-extension: yml        shared-configs[0]:          data-id: maternal-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}          refresh: true      #       註冊中心      discovery:        server-addr: @nacos.server.addr@        namespace: @nacos.namespace@

pom.xml的profiles

但隨著我們需求的變化,發版,有時候會同時釋出多個環境,每個環境打一次包,太耗時;當然,我們是透過提前寫好的shell指令碼啟動的,可以在啟動時指定引數,

如下:

nacosadder='127.0.0.1:8848'nacosnamespace='uuid'springenv='dev'startup=" --spring.profiles.active=${springenv} --spring.cloud.nacos.config.server-addr=${nacosadder}  --spring.cloud.nacos.config.namespace=${nacosnamespace}  --spring.cloud.nacos.discovery.namespace=${nacosnamespace}  --spring.cloud.nacos.discovery.server-addr=${nacosadder} "

但這引數實在是太長了,有沒有更好的方案呢? 一次靈感閃現,想到了bootstrap.yml是不是也可以像application-xx.yml這些寫,然後實踐嘗試,果真可以,隨後進行了改造。

由於nacos用到了註冊和配置兩個功能,啟動時變數需要指定4個配置,曾經構想用${xx}引用的方式來避免nacos配置指定兩次,然後Spring並不支援啟動時指定變數a, 然後b又引用a,必須直接指定具體配置項。

下面上最終圖

可能會有同學說,既然用到了nacos配置中心,那就把配置都放上去就行了,本地不用搞這麼複雜的配置,

我的想法是這樣的,優先以本地配置為主,就算沒有nacos也可以正常執行,當需要實時修改配置時,再在nacos加上相關配置,用於覆蓋本地配置。

畢竟大部分配置的修改頻率不高,如果把配置都放在nacos,那每個環境都需要去加上配置,這對於開發人員還是很煩的,更嚴重的是容易忘記或遺漏。

14
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 《嵌入式裝置驅動程式基礎筆記》第25期