前情回顧:
- 《Spring Cloud Alibaba基礎教程:使用Nacos實現服務註冊與發現》
- 《Spring Cloud Alibaba基礎教程:支援的幾種服務消費方式》
- 《Spring Cloud Alibaba基礎教程:使用Nacos作為配置中心》
- 《Spring Cloud Alibaba基礎教程:Nacos配置的載入規則詳解》
- 《Spring Cloud Alibaba基礎教程:Nacos配置的多環境管理》
對於Nacos作為配置中心的使用,通過之前的幾篇博文,我們已經介紹瞭如何在Nacos中建立配置內容、Nacos配置內容與Spring應用配置之間的對應關係以及實戰中多環境下的配置管理方案。
但是,我們實際應用過程中還會經常碰到這樣的問題:有時候我們會對應用的配置根據具體作用做一些拆分,儲存在不同的配置檔案中,除了歸類不同的配置之外,也可以便於共享配置給不同的應用。對於這樣的需求,Nacos也可以很好的支援,下面就來具體介紹一下,當使用Nacos時,我們如何載入多個配置,以及如何共享配置。
載入多個配置
通過之前的學習,我們已經知道Spring應用對Nacos中配置內容的對應關係是通過下面三個引數控制的:
- spring.cloud.nacos.config.prefix
- spring.cloud.nacos.config.file-extension
- spring.cloud.nacos.config.group
預設情況下,會載入Data ID=${spring.application.name}.properties
,Group=DEFAULT_GROUP
的配置。
假設現在有這樣的一個需求:我們想要對所有應用的Actuator模組以及日誌輸出做統一的配置管理。所以,我們希望可以將Actuator模組的配置放在獨立的配置檔案actuator.properties
檔案中,而對於日誌輸出的配置放在獨立的配置檔案log.properties
檔案中。通過拆分這兩類配置內容,希望可以做到配置的共享載入與統一管理。
這時候,我們只需要做以下兩步,就可以實現這個需求:
第一步:在Nacos中建立Data ID=actuator.properties
,Group=DEFAULT_GROUP
和Data ID=log.properties
,Group=DEFAULT_GROUP
的配置內容。
第二步:在Spring Cloud應用中通過使用spring.cloud.nacos.config.ext-config
引數來配置要載入的這兩個配置內容,比如:
spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=log.properties
spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[1].refresh=true
可以看到,spring.cloud.nacos.config.ext-config
配置是一個陣列List型別。每個配置中包含三個引數:data-id
、group
,refresh
;前兩個不做贅述,與Nacos中建立的配置相互對應,refresh
引數控制這個配置檔案中的內容時候支援自動重新整理,預設情況下,只有預設載入的配置才會自動重新整理,對於這些擴充套件的配置載入內容需要配置該設定時候才會實現自動重新整理。
共享配置
通過上面載入多個配置的實現,實際上我們已經可以實現不同應用共享配置了。但是Nacos中還提供了另外一個便捷的配置方式,比如下面的設定與上面使用的配置內容是等價的:
spring.cloud.nacos.config.shared-dataids=actuator.properties,log.properties
spring.cloud.nacos.config.refreshable-dataids=actuator.properties,log.properties
-
spring.cloud.nacos.config.shared-dataids
引數用來配置多個共享配置的Data Id
,多個的時候用用逗號分隔 -
spring.cloud.nacos.config.refreshable-dataids
引數用來定義哪些共享配置的Data Id
在配置變化時,應用中可以動態重新整理,多個Data Id
之間用逗號隔開。如果沒有明確配置,預設情況下所有共享配置都不支援動態重新整理
配置載入的優先順序
當我們載入多個配置的時候,如果存在相同的key時,我們需要深入瞭解配置載入的優先順序關係。
在使用Nacos配置的時候,主要有以下三類配置:
- A: 通過
spring.cloud.nacos.config.shared-dataids
定義的共享配置 - B: 通過
spring.cloud.nacos.config.ext-config[n]
定義的載入配置 - C: 通過內部規則(
spring.cloud.nacos.config.prefix
、spring.cloud.nacos.config.file-extension
、spring.cloud.nacos.config.group
這幾個引數)拼接出來的配置
要弄清楚這幾個配置載入的順序,我們從日誌中也可以很清晰的看到,我們可以做一個簡單的實驗:
spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties
spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.shared-dataids=log.properties
spring.cloud.nacos.config.refreshable-dataids=log.properties
根據上面的配置,應用分別會去載入三類不同的配置檔案,啟動應用的時候,將會在日誌中看到如下輸出:
2019-02-08 21:23:02.665 INFO 63804 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: `log.properties`, group: `DEFAULT_GROUP`
2019-02-08 21:23:02.671 INFO 63804 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: `actuator.properties`, group: `DEFAULT_GROUP`
2019-02-08 21:23:02.677 INFO 63804 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: `alibaba-nacos-config-client.properties`, group: `DEFAULT_GROUP`
後面載入的配置會覆蓋之前載入的配置,所以優先順序關係是:A < B < C
參考資料
程式碼示例
本文示例讀者可以通過檢視下面倉庫的中的alibaba-nacos-config-client
專案:
- Github:https://github.com/dyc87112/SpringCloud-Learning/
- Gitee:https://gitee.com/didispace/SpringCloud-Learning/
如果您對這些感興趣,歡迎star、follow、收藏、轉發給予支援!