源码地址(重点开源码中的 nacos8030 模块):https://download.csdn.net/download/weixin_42950079/87264006
多配置文件 / 共享配置
在一个微服务架构应用系统中可能包含成百上千个微服务。而很多微服务可能都引入相同的中间件,当环境中引入的中间件较多时,集中管理配置/共享配置是非常有必要的,方便管理维护。比如:MySQL数据库、redis缓存、消息队列等。
1. 在 nacos 控制台中,在 dev 命名空间中创建三个共享文件:config-caidong.mysql.properties、config-caidong.redis.properties、config-caidong.rocketmq.properties
2. 注意:要使用 Nacos 配置中心,必需在bootstrap.properties / bootstrap.yml中配置。bootstrap.yml配置文件的加载顺序要优先于application.yml
spring:
cloud:
nacos:
config:
#配置中心
server-addr: 192.168.184.129:8849
#需要配置nacos的 用户名和密码,否则报unknown user!错误
username: nacos
password: nacos
#对于非public命名空间的配置文件,需要指定命名空间ID
namespace: 29f2547c-ce20-40b4-b76c-e4ae53f481fe
#对于非DEFAULT_GROUP分组的配置文件,需要指定分组名称
group: dev
#指定配置文件名(data-id: [file-name].[file-extension])
#prefix: file-name
#如果配置文件扩展名不是properties,则必须指定扩展名(data-id: [file-name].[file-extension])
#file-extension: yaml
#extension-configs 可以支持多配置文件,但是需要在同一个命名空间下,可以不同分组。
extension-configs[0]:
data-id: config-caidong-mysql.properties
group: dev
refresh: true
extension-configs[1]:
data-id: config-caidong-redis.properties
group: dev
refresh: true
extension-configs[2]: #extension-configs[下标]配置中,下标越大,优先级越高
data-id: config-caidong-rocketmq.properties #配置data-id
group: dev #分组名称
refresh: true #开启动态刷新,默认为false
不知道什么原因,多文件配置时,用bootstrap.yml可以,但使用bootstrap.propertie无效
spring.cloud.nacos.config.server-addr=192.168.184.129:8849
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.namespace=29f2547c-ce20-40b4-b76c-e4ae53f481fe
spring.cloud.nacos.config.group=dev
spring.cloud.nacos.config.shared-configs[0].data-id=config-caidong-mysql.properties
spring.cloud.nacos.config.shared-configs[0].group==dev
spring.cloud.nacos.config.shared-configs[0].refresh=true
spring.cloud.nacos.config.shared-configs[1].data-id=config-caidong-redis.properties
spring.cloud.nacos.config.shared-configs[1].group==dev
spring.cloud.nacos.config.shared-configs[1].refresh=true
spring.cloud.nacos.config.shared-configs[2].data-id=config-caidong-rocketmq.properties
spring.cloud.nacos.config.shared-configs[2].group==dev
spring.cloud.nacos.config.shared-configs[2].refresh=true
3. 创建一个 SpringBoot 应用进行测试。
run 方法执行后,会将所有配置文件的信息加载到环境中。所以可以通过 applicationContext.getEnvironment().getProperty() 获取到配置文件的配置项。
@SpringBootApplication
public class Nacos8030Apllication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(Nacos8030Apllication.class, args);
String mysqlName = applicationContext.getEnvironment().getProperty("com.mysql.name");
System.out.println("redisName: " + mysqlName);
String redisName = applicationContext.getEnvironment().getProperty("com.redis.name");
System.out.println("redisName: " + redisName);
String rocketmqName = applicationContext.getEnvironment().getProperty("com.rocketmq.name");
System.out.println("redisName: " + rocketmqName);
}
}
4. 可以看到如下输出结果。
2022-12-09 11:49:08.989 INFO 3424 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-redis.properties, group=dev
2022-12-09 11:49:08.990 INFO 3424 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-rocketmq.properties, group=dev
2022-12-09 11:49:08.991 INFO 3424 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-mysql.properties, group=dev
2022-12-09 11:49:08.992 INFO 3424 --- [ restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation unchanged
redisName: 数据库配置
redisName: 缓存配置
redisName: 消息队列配置
多配置文件 - 多种写法
shared-configs 与 extension-configs 都能实现加载多个配置文件 ,第一种写法中优先级:[0] < [1]
extension-configs > shared-configs 的优先级
shared-configs 写法
第一种写法
spring:
cloud:
nacos:
config:
#配置中心
server-addr: 192.168.184.129:8849
#需要配置nacos的 用户名和密码,否则报unknown user!错误
username: nacos
password: nacos
#对于非public命名空间的配置文件,需要指定命名空间ID
namespace: 29f2547c-ce20-40b4-b76c-e4ae53f481fe
#对于非DEFAULT_GROUP分组的配置文件,需要指定分组名称
group: dev
#指定配置文件名(data-id: [file-name].[file-extension])
#prefix: file-name
#如果配置文件扩展名不是properties,则必须指定扩展名(data-id: [file-name].[file-extension])
#file-extension: yaml
#shared-configs 可以支持多配置文件,但是需要在同一个命名空间下,可以不同分组。
shared-configs[0]:
data-id: config-caidong-mysql.properties
group: dev
refresh: true
shared-configs[1]:
data-id: config-caidong-redis.properties
group: dev
refresh: true
shared-configs[2]: #shared-configs[下标]配置中,下标越大,优先级越高
data-id: config-caidong-rocketmq.properties #配置data-id
group: dev #分组名称
refresh: true #开启动态刷新,默认为false
第二种写法
spring:
cloud:
nacos:
config:
#配置中心
server-addr: 192.168.184.129:8849
#需要配置nacos的 用户名和密码,否则报unknown user!错误
username: nacos
password: nacos
#对于非public命名空间的配置文件,需要指定命名空间ID
namespace: 29f2547c-ce20-40b4-b76c-e4ae53f481fe
#对于非DEFAULT_GROUP分组的配置文件,需要指定分组名称
group: dev
#指定配置文件名(data-id: [file-name].[file-extension])
#prefix: file-name
#如果配置文件扩展名不是properties,则必须指定扩展名(data-id: [file-name].[file-extension])
#file-extension: yaml
#shared-configs 可以支持多配置文件,但是需要在同一个命名空间下,可以不同分组。
shared-configs:
- data-id: config-caidong-mysql.properties
group: dev
refresh: true
- data-id: config-caidong-redis.properties
group: dev
refresh: true
- data-id: config-caidong-rocketmq.properties #配置data-id
group: dev #分组名称
refresh: true #开启动态刷新,默认为false
extension-configs 写法
第一种写法
spring:
cloud:
nacos:
config:
#配置中心
server-addr: 192.168.184.129:8849
#需要配置nacos的 用户名和密码,否则报unknown user!错误
username: nacos
password: nacos
#对于非public命名空间的配置文件,需要指定命名空间ID
namespace: 29f2547c-ce20-40b4-b76c-e4ae53f481fe
#对于非DEFAULT_GROUP分组的配置文件,需要指定分组名称
group: dev
#指定配置文件名(data-id: [file-name].[file-extension])
#prefix: file-name
#如果配置文件扩展名不是properties,则必须指定扩展名(data-id: [file-name].[file-extension])
#file-extension: yaml
#extension-configs 可以支持多配置文件,但是需要在同一个命名空间下,可以不同分组。
extension-configs[0]:
data-id: config-caidong-mysql.properties
group: dev
refresh: true
extension-configs[1]:
data-id: config-caidong-redis.properties
group: dev
refresh: true
extension-configs[2]: #extension-configs[下标]配置中,下标越大,优先级越高
data-id: config-caidong-rocketmq.properties #配置data-id
group: dev #分组名称
refresh: true #开启动态刷新,默认为false
spring:
cloud:
nacos:
config:
#配置中心
server-addr: 192.168.184.129:8849
#需要配置nacos的 用户名和密码,否则报unknown user!错误
username: nacos
password: nacos
#对于非public命名空间的配置文件,需要指定命名空间ID
namespace: 29f2547c-ce20-40b4-b76c-e4ae53f481fe
#对于非DEFAULT_GROUP分组的配置文件,需要指定分组名称
group: dev
#指定配置文件名(data-id: [file-name].[file-extension])
#prefix: file-name
#如果配置文件扩展名不是properties,则必须指定扩展名(data-id: [file-name].[file-extension])
#file-extension: yaml
#extension-configs 可以支持多配置文件,但是需要在同一个命名空间下,可以不同分组。
extension-configs:
- data-id: config-caidong-mysql.properties
group: dev
refresh: true
- data-id: config-caidong-redis.properties
group: dev
refresh: true
- data-id: config-caidong-rocketmq.properties #配置data-id
group: dev #分组名称
refresh: true #开启动态刷新,默认为false
参考文献
https://blog.csdn.net/qq_32808649/article/details/126967160
https://blog.csdn.net/qq_29229567/article/details/95327423
https://blog.csdn.net/yueyezhufeng/article/details/126285311