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-demo

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

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

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

那么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的优先级

因此配置的时候要留意,如果是和应用名同名的配置文件,不要配置在 config.ext-config 中,直接配置在spring.cloud.nacos.config.group=DEMO,ext-config中配置应用名以外的配置文件,Group也可以配置为其他自定义组

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

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

spring.cloud.nacos.config.ext-config[0].refresh=true,这样就不会出现获取不到配置文件的事情了。

 

配置的优先级

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章