配置加载

配置文件的加载规则是由下面几个属性组合而成的

spring.cloud.nacos.config.namespace= 默认:""//空,此处填的是namespaceId,而不是名字public
spring.cloud.nacos.config.group= 默认:DEFAULT_GROUP
# ${spring.cloud.nacos.config.prefix} > ${spring.cloud.nacos.config.name} > ${spring.application.name}
spring.cloud.nacos.config.prefix= 
spring.cloud.nacos.config.file-extension= 默认 .properties

启动配置bootstrap.properties

应用名以poseidon为例

# 基础配置
spring.application.name=poseidon
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.server-addr=192.168.12.230:8848
spring.cloud.nacos.config.namespace=
spring.cloud.nacos.config.group=yourGroup

# 多配置加载
# 使用默认的 DEFAULT_GROUP,如果上面配置了,则按照上面配置的加载
# 默认自动刷新
spring.cloud.nacos.config.ext-config[0].data-id=poseidon-biz.properties

# 不在默认的组,不会自动刷新
spring.cloud.nacos.config.ext-config[1].data-id=nacos-multi-config-log.yaml
spring.cloud.nacos.config.ext-config[1].group=yourGroup

# 不在默认的组,手动启动自动刷新
spring.cloud.nacos.config.ext-config[2].data-id=nacos-multi-config-db.yaml
spring.cloud.nacos.config.ext-config[2].group=yourGroup
spring.cloud.nacos.config.ext-config[2].refresh=true

# 测试加载顺序
spring.cloud.nacos.config.ext-config[3].data-id=nacos-multi-config-redis.yaml
spring.cloud.nacos.config.ext-config[3].group=yourGroup
  • 通过spring.cloud.nacos.config.ext-config[n].data-id的配置来配置多个DataId 的配置
  • 通过spring.cloud.nacos.config.ext-config[n].group 的配置来指定dataId所在的组,不明确指定的话使用默认的DEFAULT_GROUP
  • 通过spring.cloud.nacos.config.ext-config[n].refresh 的配置来控制该dataId属性变更时,是否动态刷新加载,默认如果不在DEFAULT_GROUP,自动刷新是关闭的,可以通过置为true来手动开启。

spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为 ${spring.application.name}.${file-extension:properties} 为前缀的基础配置,还加载了 dataid 为 ${spring.application.name}-${profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过 Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

多个DataId同时配置时,它的优先级关系是 spring.cloud.nacos.config.ext-config[n].data-id n的值越大,优先级越高,即先加载,所以n越小则为最终生效的配置

spring.cloud.nacos.config.ext-config[n].data-id= 必须带上扩展名,即文件格式,支持properties,也支持yaml/yml.

此时spring.cloud.nacos.config.file-extension 的配置对自定义扩展的配置的data-id是无效的。

共享配置

# 共享配置
spring.cloud.nacos.config.shared-dataids=common-log.yaml,common-redis.yaml
spring.cloud.nacos.config.refreshable-dataids=common-log.yaml
  • 通过spring.cloud.nacos.config.share-dataids 来支持多个共享dataId的配置,多个配置文件之间用逗号隔开。
  • 通过spring.cloud.nacos.config.refreshable-dataids 来支持哪些共享配置的dataId在变化时,应用中是否动态刷新,能感知到最新的值,多个dataId之间用逗号隔开。如果没有明确指定的配置,默认情况下所共享的配置是不支持动态刷新。

spring.cloud.nacos.config.share-dataids 的配置加载顺序是按照从左到右的,所以如果出现相同的配置时,后面的会覆盖前面的

使用spring.cloud.nacos.config.share-dataids 来配置共享配置时,需要加上后缀名,即properties,yaml/yml.此时的spring.cloud.nacos.config.file-extension 的配置对此项无效

通过使用spring.cloud.nacos.config.refreshable-dataids 来指定哪些共享配置是需要支持自动刷新的。默认未指定的配置是不支持自动刷新的。同时也需要加上配置的后缀名

配置的优先级

spring cloud alibaba nacos config 目前提供了三种配置能力从Nacos拉取相关的配置。

  • A:通过spring.cloud.nacos.config.shared-datadis 支持多个共享data id的配置。

  • B:通过spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多个扩展Data Id的配置。

  • C:通过内部相关规则(应用名、应用名+profile)自动生成的DataId配置。

    优先级:A < B < C

完全关闭配置

通过设置spring.cloud.nacos.config.enabled =false 来完全关闭Spring Cloud Nacos Config 配置功能。

热刷新配置示例

multiapp:
  mutualfans:
  	taskDetailH5Url: https://baidu.com/task-details
    starDetailH5Url: https://baidu.com/star-details
    baseDyUid: 123
    dailyMaxApply: 141
    seats: 20
    startCarNum: 2
    ticketFee: 1000
    serviceFee: 50
    serviceMoney: 0.05
    serviceOldMoney: 0.1
    maxFineMoney: 950
    freezeMoneyStr: 10
    returnMoneyStr: 9.5

or

multiapp.mutualfans.taskDetailH5Url=https://baidu.com/task-details
multiapp.mutualfans.starDetailH5Url=https://baidu.com/star-details
multiapp.mutualfans.baseDyUid=3729136594481880
multiapp.mutualfans.dailyMaxApply=141
multiapp.mutualfans.seats=20
multiapp.mutualfans.startCarNum=2
multiapp.mutualfans.ticketFee=1000
multiapp.mutualfans.serviceFee=50
multiapp.mutualfans.serviceMoney=0.05
multiapp.mutualfans.serviceOldMoney=0.1
multiapp.mutualfans.maxFineMoney=950
multiapp.mutualfans.freezeMoneyStr=10
multiapp.mutualfans.returnMoneyStr=9.5

定义Bean

@Data
@Component
@ConfigurationProperties("multiapp.mutualfans")
public class MutualFansOption {

    private String taskDetailH5Url;

    private String starDetailH5Url;
    
    private String baseDyUid;

    private Integer dailyMaxApply;

    private Integer seats;

    private Integer startCarNum;

    private Integer ticketFee;

    private Integer serviceFee;
  
    private Double serviceMoney;
  
    private Double serviceOldMoney;
  
    private Integer maxFineMoney;

    private String freezeMoneyStr;

    private String returnMoneyStr;

}

使用 @RefreshScop 则可以保证配置的实时同步