Spring Cloud Alibaba基礎(chǔ)教程:Nacos配置的多文件加載與共享配置

前情回顧:

對(duì)于Nacos作為配置中心的使用,通過(guò)之前的幾篇博文,我們已經(jīng)介紹了如何在Nacos中創(chuàng)建配置內(nèi)容、Nacos配置內(nèi)容與Spring應(yīng)用配置之間的對(duì)應(yīng)關(guān)系以及實(shí)戰(zhàn)中多環(huán)境下的配置管理方案。

但是,我們實(shí)際應(yīng)用過(guò)程中還會(huì)經(jīng)常碰到這樣的問(wèn)題:有時(shí)候我們會(huì)對(duì)應(yīng)用的配置根據(jù)具體作用做一些拆分,存儲(chǔ)在不同的配置文件中,除了歸類不同的配置之外,也可以便于共享配置給不同的應(yīng)用。對(duì)于這樣的需求,Nacos也可以很好的支持,下面就來(lái)具體介紹一下,當(dāng)使用Nacos時(shí),我們?nèi)绾渭虞d多個(gè)配置,以及如何共享配置。

加載多個(gè)配置

通過(guò)之前的學(xué)習(xí),我們已經(jīng)知道Spring應(yīng)用對(duì)Nacos中配置內(nèi)容的對(duì)應(yīng)關(guān)系是通過(guò)下面三個(gè)參數(shù)控制的:

  • spring.cloud.nacos.config.prefix
  • spring.cloud.nacos.config.file-extension
  • spring.cloud.nacos.config.group

默認(rèn)情況下,會(huì)加載Data ID=${spring.application.name}.properties,Group=DEFAULT_GROUP的配置。

假設(shè)現(xiàn)在有這樣的一個(gè)需求:我們想要對(duì)所有應(yīng)用的Actuator模塊以及日志輸出做統(tǒng)一的配置管理。所以,我們希望可以將Actuator模塊的配置放在獨(dú)立的配置文件actuator.properties文件中,而對(duì)于日志輸出的配置放在獨(dú)立的配置文件log.properties文件中。通過(guò)拆分這兩類配置內(nèi)容,希望可以做到配置的共享加載與統(tǒng)一管理。

這時(shí)候,我們只需要做以下兩步,就可以實(shí)現(xiàn)這個(gè)需求:

第一步:在Nacos中創(chuàng)建Data ID=actuator.properties,Group=DEFAULT_GROUPData ID=log.propertiesGroup=DEFAULT_GROUP的配置內(nèi)容。

第二步:在Spring Cloud應(yīng)用中通過(guò)使用spring.cloud.nacos.config.ext-config參數(shù)來(lái)配置要加載的這兩個(gè)配置內(nèi)容,比如:

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配置是一個(gè)數(shù)組List類型。每個(gè)配置中包含三個(gè)參數(shù):data-idgrouprefresh;前兩個(gè)不做贅述,與Nacos中創(chuàng)建的配置相互對(duì)應(yīng),refresh參數(shù)控制這個(gè)配置文件中的內(nèi)容時(shí)候支持自動(dòng)刷新,默認(rèn)情況下,只有默認(rèn)加載的配置才會(huì)自動(dòng)刷新,對(duì)于這些擴(kuò)展的配置加載內(nèi)容需要配置該設(shè)置時(shí)候才會(huì)實(shí)現(xiàn)自動(dòng)刷新。

共享配置

通過(guò)上面加載多個(gè)配置的實(shí)現(xiàn),實(shí)際上我們已經(jīng)可以實(shí)現(xiàn)不同應(yīng)用共享配置了。但是Nacos中還提供了另外一個(gè)便捷的配置方式,比如下面的設(shè)置與上面使用的配置內(nèi)容是等價(jià)的:

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參數(shù)用來(lái)配置多個(gè)共享配置的Data Id,多個(gè)的時(shí)候用用逗號(hào)分隔
  • spring.cloud.nacos.config.refreshable-dataids參數(shù)用來(lái)定義哪些共享配置的Data Id在配置變化時(shí),應(yīng)用中可以動(dòng)態(tài)刷新,多個(gè)Data Id之間用逗號(hào)隔開(kāi)。如果沒(méi)有明確配置,默認(rèn)情況下所有共享配置都不支持動(dòng)態(tài)刷新

配置加載的優(yōu)先級(jí)

當(dāng)我們加載多個(gè)配置的時(shí)候,如果存在相同的key時(shí),我們需要深入了解配置加載的優(yōu)先級(jí)關(guān)系。

在使用Nacos配置的時(shí)候,主要有以下三類配置:

  • A: 通過(guò)spring.cloud.nacos.config.shared-dataids定義的共享配置
  • B: 通過(guò)spring.cloud.nacos.config.ext-config[n]定義的加載配置
  • C: 通過(guò)內(nèi)部規(guī)則(spring.cloud.nacos.config.prefix、spring.cloud.nacos.config.file-extension、spring.cloud.nacos.config.group這幾個(gè)參數(shù))拼接出來(lái)的配置

要弄清楚這幾個(gè)配置加載的順序,我們從日志中也可以很清晰的看到,我們可以做一個(gè)簡(jiǎn)單的實(shí)驗(yàn):

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

根據(jù)上面的配置,應(yīng)用分別會(huì)去加載三類不同的配置文件,啟動(dòng)應(yīng)用的時(shí)候,將會(huì)在日志中看到如下輸出:

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'

后面加載的配置會(huì)覆蓋之前加載的配置,所以優(yōu)先級(jí)關(guān)系是:A < B < C

參考資料

連載目錄

代碼示例

本文示例讀者可以通過(guò)查看下面?zhèn)}庫(kù)的中的alibaba-nacos-config-client項(xiàng)目:

如果您對(duì)這些感興趣,歡迎star、follow、收藏、轉(zhuǎn)發(fā)給予支持!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容