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


加載多個配置

通過之前的學習,我們已經知道Spring應用對Nacos中配置內容的對應關系是通過下面三個參數控制的:

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

默認情況下,會加載Data ID=${spring.application.name}.propertiesGroup=DEFAULT_GROUP的配置。

假設現在有這樣的一個需求:我們想要對所有應用的Actuator模塊以及日志輸出做統一的配置管理。所以,我們希望可以將Actuator模塊的配置放在獨立的配置文件actuator.properties文件中,而對於日志輸出的配置放在獨立的配置文件log.properties文件中。通過拆分這兩類配置內容,希望可以做到配置的共享加載與統一管理。

這時候,我們只需要做以下兩步,就可以實現這個需求:

第一步:在Nacos中創建Data ID=actuator.propertiesGroup=DEFAULT_GROUPData ID=log.propertiesGroup=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-idgrouprefresh;前兩個不做贅述,與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.prefixspring.cloud.nacos.config.file-extensionspring.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根據上面的配置,應用分別會去加載三類不同的配置文件,啟動應用的時候,將會在日志中看到如下輸出:

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM