首页 > 编程学习 > Spring Cloud Alibaba Nacos Config - - - >多配置文件/共享配置

源码地址(重点开源码中的 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

cd
cd


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: nacospassword: nacos#对于非public命名空间的配置文件,需要指定命名空间IDnamespace: 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.propertiesgroup: devrefresh: trueextension-configs[1]:data-id: config-caidong-redis.propertiesgroup: devrefresh: trueextension-configs[2]: #extension-configs[下标]配置中,下标越大,优先级越高data-id: config-caidong-rocketmq.properties #配置data-idgroup: 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=devspring.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=truespring.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=truespring.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: nacospassword: nacos#对于非public命名空间的配置文件,需要指定命名空间IDnamespace: 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.propertiesgroup: devrefresh: trueshared-configs[1]:data-id: config-caidong-redis.propertiesgroup: devrefresh: trueshared-configs[2]: #shared-configs[下标]配置中,下标越大,优先级越高data-id: config-caidong-rocketmq.properties #配置data-idgroup: dev #分组名称refresh: true #开启动态刷新,默认为false

第二种写法

spring:cloud:nacos:config:#配置中心server-addr: 192.168.184.129:8849#需要配置nacos的 用户名和密码,否则报unknown user!错误username: nacospassword: nacos#对于非public命名空间的配置文件,需要指定命名空间IDnamespace: 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.propertiesgroup: devrefresh: true- data-id: config-caidong-redis.propertiesgroup: devrefresh: true- data-id: config-caidong-rocketmq.properties #配置data-idgroup: dev #分组名称refresh: true #开启动态刷新,默认为false

extension-configs 写法

第一种写法

spring:cloud:nacos:config:#配置中心server-addr: 192.168.184.129:8849#需要配置nacos的 用户名和密码,否则报unknown user!错误username: nacospassword: nacos#对于非public命名空间的配置文件,需要指定命名空间IDnamespace: 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.propertiesgroup: devrefresh: trueextension-configs[1]:data-id: config-caidong-redis.propertiesgroup: devrefresh: trueextension-configs[2]: #extension-configs[下标]配置中,下标越大,优先级越高data-id: config-caidong-rocketmq.properties #配置data-idgroup: dev #分组名称refresh: true #开启动态刷新,默认为false
spring:cloud:nacos:config:#配置中心server-addr: 192.168.184.129:8849#需要配置nacos的 用户名和密码,否则报unknown user!错误username: nacospassword: nacos#对于非public命名空间的配置文件,需要指定命名空间IDnamespace: 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.propertiesgroup: devrefresh: true- data-id: config-caidong-redis.propertiesgroup: devrefresh: true- data-id: config-caidong-rocketmq.properties #配置data-idgroup: 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


本文链接:https://www.ngui.cc/article/show-747468.html
Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000