Spring Cloud Alibaba Nacos 配置中心使用ext-config,DataID, Group時沒法獲取到對應Group的配置的注意事項

在使用Spring Cloud配合Nacos Config做爲配置中心來使用的時候,Nacos支持對多個環境的配置管理,一般經過命名空間來實現,好比測試環境,預發佈環境。而若是使用同一個配置中心有多個項目組或者團隊或者不一樣的模塊管理的時候,一般使用Group來區分,Nacos Config相關的配置詳情,在官方文檔中都有過介紹,經過閱讀能夠了解,https://github.com/spring-cloud-incubator/spring-cloud-alibaba/wiki/Nacos-config,這裏向你們分享一下,使用中遇到的一個問題,或者說是一點文檔中描述不太明確的地方,Nacos Config, 支持自定義 Group 的配置以及支持自定義擴展的 Data Id 配置 ,其中Group默認使用的是DEFAULT_GROUP, 咱們能夠從nacos的源碼 org.springframework.cloud.alibaba.nacos.NacosConfigProperties中看到,若是想支持對多個配置文件的使用,須要用到ext-config,spring.cloud.nacos.config.ext-config[n].data-id, spring.cloud.nacos.config.ext-config[n].group, spring.cloud.nacos.config.ext-config[n].refresh,  可是在使用的時候遇到了一個問題 ,就是在ext-config 裏配置了和應用名相同的配置文件時,則實際去獲取的不是ext-config的group而是使用的DEFAULT_GROUP來獲取的,若是你在DEFAULT_GROUP沒有配置文件,則什麼都獲取不到,至關於DEFAULT_GROUP覆蓋掉了自定義配置中配置的Group,例如:當前服務的名稱爲  nacos-demo 既 spring.application.name=nacos-demogit

spring.cloud.nacos.config.ext-config[0].data-id=nacos-demo.properties(    ${spring.application.name}.properties  )github

spring.cloud.nacos.config.ext-config[0].group=DEMOspring

spring.cloud.nacos.config.ext-config[0].refresh=trueapp

那麼Client在獲取配置的時候,默認是獲取的 data-id爲nacos-demo.properties  group爲DEFAULT_GROUP的配置文件,而取不到DEMO的配置,這是爲何呢?  從nacos的源碼 NacosPropertySourceLocator 中能夠看到測試

他的加載順序是默認加載 SharedConfig共享配置,而後加載extConfig自定義配置,最後加載applicationConfig, 所以最後加載的會覆蓋掉以前的配置,所以當你讀取應用名同名的配置時會讀取不到,由於配置中內心並無配置 Group爲 DEFAULT_GROUP的nacos-demo.properties。 spring.cloud.nacos.config.group的優先級會高於spring.cloud.nacos.config.ext-config[0].group的優先級spa

所以配置的時候要留意,若是是和應用名同名的配置文件,不要配置在 config.ext-config 中,直接配置在spring.cloud.nacos.config.group=DEMO,ext-config中配置應用名之外的配置文件,Group也能夠配置爲其餘自定義組code

spring.cloud.nacos.config.ext-config[0].data-id=(非應用名).propertiesblog

spring.cloud.nacos.config.ext-config[0].group=default文檔

spring.cloud.nacos.config.ext-config[0].refresh=true,這樣就不會出現獲取不到配置文件的事情了。get

 

配置的優先級

Spring Cloud Alibaba Nacos Config 目前提供了三種配置能力從 Nacos 拉取相關的配置。

  • A: 經過 spring.cloud.nacos.config.shared-dataids 支持多個共享 Data Id 的配置

  • B: 經過 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多個擴展 Data Id 的配置

  • C: 經過內部相關規則(應用名、應用名+ Profile )自動生成相關的 Data Id 配置

當三種方式共同使用時,他們的一個優先級關係是:A < B < C

相關文章
相關標籤/搜索