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

相关文章
相关标签/搜索