Nacos多配置文件加载刷新、共享配置
文章目录
配置加载
配置文件的加载规则是由下面几个属性组合而成的
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;
}