Nacos配置的多文件加载与共享配置方式
作者:翟永超
Nacos配置的多文件加载与共享配置
思考一个问题,现实开发中会遇到这样一个场景,我们把应用拆分成到多个配置文件中,那么Nacos怎么管理多个配置文件?
加载多个配置
我们已经知道Spring应用对Nacos中配置内容的对应关系是通过下面三个参数控制的:
spring.cloud.nacos.config.prefix
spring.cloud.nacos.config.file-extension
spring.cloud.nacos.config.group
默认情况下,我们使用的方式:Data ID=${spring.application.name}.properties
Group=DEFAULT_GROUP
的配置。
例如:现在有这样需求:我们想要对所有应用的Actuator模块以及日志输出做统一的配置管理。
最简单的实现方式应用相关配置Actuator.properties,日志log.properties 。我们通过拆分这两类的配置,现在需要将其共享
第一步:
在Nacos中创建Data ID=actuator.properties
,Group=DEFAULT_GROUP
和Data ID=log.properties
,Group=DEFAULT_GROUP
的配置内容。
第二步:
在Spring Cloud应用中通过使用spring.cloud.nacos.config.ext-config参数来配置要加载的这两个配置内容,比如:
spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP spring.cloud.nacos.config.ext-config[0].refresh=true spring.cloud.nacos.config.ext-config[1].data-id=log.properties spring.cloud.nacos.config.ext-config[1].group=DEFAULT_GROUP spring.cloud.nacos.config.ext-config[1].refresh=true
可以看到:
spring.cloud.nacos.config.ext-config :
置是一个数组List类型。每个配置中包含三个参数:data-id
、group
,refresh
refresh
: 参数控制这个配置文件中的内容时候支持自动刷新,默认情况下,只有默认加载的配置才会自动刷新,对于这些扩展的配置加载内容需要配置该设置时候才会实现自动刷新。
共享配置
通过上述的加载集合的方式实际上已经可以做到共享配置文件了。Nacos中还提供了另外一个便捷的配置方式
spring.cloud.nacos.config.shared-dataids=actuator.properties,log.properties spring.cloud.nacos.config.refreshable-dataids=actuator.properties,log.properties
spring.cloud.nacos.config.shared-dataids:
参数用来配置多个共享配置的Data Id
,多个的时候用用逗号分隔spring.cloud.nacos.config.refreshable-dataids
: 参数用来定义哪些共享配置的Data Id
Data Id在配置变化时,应用中可以动态刷新,多个``之间用逗号隔开。如果没有明确配置,默认情况下所有共享配置都不支持动态刷新
配置加载的优先级
当我们加载多个配置的时候,如果存在相同的key时,我们需要深入了解配置加载的优先级关系。
在使用Nacos配置的时候,主要有以下三类配置:
- 通过spring.cloud.nacos.config.shared-dataids定义的共享配置
- 通过spring.cloud.nacos.config.ext-config[n]定义的加载配置
- 通过内部规则(spring.cloud.nacos.config.prefix、spring.cloud.nacos.config.file-extension、spring.cloud.nacos.config.group这几个参数)拼接出来的配置
要弄清楚这几个配置加载的顺序,我们把这几个配置加到应用上,观察日志
spring.cloud.nacos.config.ext-config[0].data-id=actuator.properties spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP spring.cloud.nacos.config.ext-config[0].refresh=true spring.cloud.nacos.config.shared-dataids=log.properties spring.cloud.nacos.config.refreshable-dataids=log.properties
我们通过日志可以看到加载顺序:A < B < C
参考资料:Nacos官方文档
无法加载nacos配置中心的配置
在bootstrap.properties文件中对于nacos的地址配的有问题,由于idea的提示没仔细看应该配nacos的config地址,而不是discovery地址,虽然只有一点差距,但是检查起来真难
spring.cloud.nacos.config.server-addr=
写成了
spring.cloud.nacos.discovery.server-addr=
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。