Spring Cloud Alibaba Nacos Config - - - >多配置文件/共享配置
源码地址(重点开源码中的 nacos8030 模块):https://download.csdn.net/download/weixin_42950079/87264006
Spring Cloud Alibaba Nacos Config 自定义扩展的 Data Id 配置 - - - > 官方文档
多配置文件 / 共享配置
在一个微服务架构应用系统中可能包含成百上千个微服务。而很多微服务可能都引入相同的中间件,当环境中引入的中间件较多时,集中管理配置/共享配置是非常有必要的,方便管理维护。比如: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: 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("mysqlName: " + 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("rocketmqName: " + 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
mysqlName: 数据库配置
redisName: 缓存配置
rocketmqName: 消息队列配置
多配置文件 - - > shared-configs 与 extension-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[下标]配置中,下标越大,优先级越高shared-configs[0]:data-id: config-caidong-mysql.propertiesgroup: devrefresh: trueshared-configs[1]:data-id: config-caidong-redis.propertiesgroup: devrefresh: trueshared-configs[2]: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
总结
配置文件优先级:优先级高的会覆盖优先级低的,并形成互补
shared-configs 与 extension-configs 都能实现加载多个配置文件 :第一种写法中优先级:[0] < [1] 。 第二种写法中优先级: < [1]
profile > 默认配置文件 > extension-configs > shared-configs 的优先级
1)优先级测试:extension-configs > shared-configs 的优先级
1. bootstrap.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 可以支持多配置文件,但是需要在同一个命名空间下,可以不同分组。shared-configs:- data-id: config-caidong-redis.propertiesgroup: devrefresh: trueextension-configs:- data-id: config-caidong-mysql.propertiesgroup: devrefresh: true- data-id: config-caidong-redis02.propertiesgroup: devrefresh: true- data-id: config-caidong-rocketmq.properties #配置data-idgroup: dev #分组名称refresh: true #开启动态刷新,默认为false
2. 在 SpringBoot 应用的启动类中进行测试
@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("mysqlName: " + 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("rocketmqName: " + rocketmqName);}}
3. 可以看到如下输出结果。这是因为 - - > shared-configs
配置 config-caidong-redis.properties 配置文件,extension-configs
配置 config-caidong-redis02.properties 配置文件。由于 extension-configs 优先级高于 shared-configs,所以输出的是redisName: 缓存配置02
而不是 redisName: 缓存配置
2022-12-11 13:45:35.478 INFO 18872 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-redis.properties, group=dev
2022-12-11 13:45:35.479 INFO 18872 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-redis02.properties, group=dev
2022-12-11 13:45:35.480 INFO 18872 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=null.properties, group=DEFAULT_GROUP
2022-12-11 13:45:35.481 INFO 18872 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-rocketmq.properties, group=dev
2022-12-11 13:45:35.482 INFO 18872 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-mysql.properties, group=dev
mysqlName: 数据库配置
redisName: 缓存配置02
rocketmqName: 消息队列配置
2)优先级测试:后读取到的配置文件优先级更高,后读取到的配置文件会覆盖前面读取到的配置文件。
1. 将上面的 bootstrap.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:- data-id: config-caidong-mysql.propertiesgroup: devrefresh: true- data-id: config-caidong-redis02.propertiesgroup: devrefresh: true- data-id: config-caidong-rocketmq.properties #配置data-idgroup: dev #分组名称refresh: true #开启动态刷新,默认为false- data-id: config-caidong-redis.propertiesgroup: devrefresh: true
2. 可以看到如下输出结果。这是因为 - - > 在 SpringBoot 应用中,后加载的配置文件 优先级高于 先加载的配置文件,config-caidong-redis.properties 后读取,所以输出的是redisName: 缓存配置
而不是 redisName: 缓存配置02
2022-12-11 14:05:30.878 INFO 1472 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-redis.properties, group=dev
2022-12-11 14:05:30.879 INFO 1472 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-redis02.properties, group=dev
2022-12-11 14:05:30.880 INFO 1472 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=null.properties, group=DEFAULT_GROUP
2022-12-11 14:05:30.881 INFO 1472 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-rocketmq.properties, group=dev
2022-12-11 14:05:30.882 INFO 1472 --- [ restartedMain] c.a.c.n.refresh.NacosContextRefresher : listening config: dataId=config-caidong-mysql.properties, group=dev
mysqlName: 数据库配置
redisName: 缓存配置
rocketmqName: 消息队列配置
参考文献
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
Spring Cloud Alibaba Nacos Config - - - >多配置文件/共享配置相关推荐
- nacos 配置动态刷新_使用 Spring Cloud Alibaba Nacos Config 作为配置中心
什么是 Nacos Config 在分布式系统中,由于服务数量巨多,为了方便服务 配置文件统一管理,实时更新,所以需要分布式配置中心组件. Spring Cloud Alibaba Nacos Con ...
- Spring Cloud Alibaba —— Nacos Config 配置中心
导航 引言 一.什么是配置中心 二.常见的配置中心组件 三.Nacos Config 入门 四.Nacos Config 动态配置 4.1 硬编码方式(默认支持动态生效) 4.2 属性注入 五.配置共 ...
- 【SpringCloud】Spring cloud Alibaba Nacos 集群和持久化配置
文章目录 1.概述 2. Nacos持久化配置解释 2.1 Nacos默认使用derby数据库 2.2 MySQL存储 2.3 构建Nacos集群 2.3.1 复制3分 2.3.2 修改端口 2.3. ...
- 【深入了解Spring Cloud Alibaba Nacos:服务注册和配置中心】—— 每天一点小知识
- Spring Cloud Alibaba Nacos 分布式配置
Spring Cloud Alibaba 分布式配置 1. 简介 Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持.使用 Spr ...
- Spring Cloud Alibaba Nacos 分布式配置中心
文章目录 1 摘要 2 核心 Maven 依赖 3 核心代码 3.1 bootstrap 配置文件 3.2 application 配置文件 3.3 配置测试类 - Controller 层 3.4 ...
- 513、Java Spring Cloud Alibaba -【Spring Cloud Alibaba Nacos】 2021.08.30
目录 1.Nacos简介 2.使用 Docker 快速搭建 Nacos 1.4 2.1 从 git 上 clone 项目: 2.2 clone 完成后,进入 naocs-docker 目录: 2.3 ...
- Spring Cloud Alibaba Nacos Confifig是什么
Spring Cloud Alibaba Nacos Confifig是Spring Cloud Alibaba的子项目,而Spring Cloud Alibaba是阿里巴巴公司提供的开源的基于Spr ...
- Spring Cloud Alibaba Nacos 的 2 种健康检查机制!
作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) Spring Cloud Alibaba Nacos 作为注册中心不止提供了服务注 ...
- Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 11.1 Spring Cloud Alibaba Nacos 概述
11.1 Spring Cloud Alibaba Nacos 概述 11.1.1 Spring Cloud Alibaba 简介 在一开始,我们先简单介绍下Spring Cloud Alibaba的 ...
最新文章
- Python:生成两个日期间的随机日期
- 城市智能化发展中,AI公司应该做什么?
- linux kernel内存映射实例分析
- 【FPGA】单端口RAM的设计(异步读、同步写)
- java父线程子线程
- 《ES6标准入门》49~68Page 数值的拓展 数组的拓展
- 功率增长步长(powerRampingStep)
- sql中 set 和select 的区别
- 解决 CentOS7 容器 Failed to get D-Bus connection: Operation not permitted
- 框架详解_BeetleX框架详解SAEA对象
- foreach和IEnumerable+yield和IEnumerator
- jsf集成spring_Spring和JSF集成:异常处理
- 基于linux 的2048
- 特斯拉中国公开统一维保价格
- K8S_Google工作笔记0003---K8S核心概念
- 基金小白要如何入门?
- vue.js 入门案例,双向绑定实现任务清单
- nopcommerce插件深度剖析
- Bailian3751 地质考察队【最值】
- 详解Linux操作系统的系统备份与恢复
热门文章
- 域名指向变更后,域名依旧指向老IP问题
- 全国计算机比赛图片,我校学子获2020年“中国高校计算机大赛-网络技术挑战赛”全国总决赛一等奖(图)-全国文明校园建设网...
- MFC中利用ListControl制作空表格,由键盘输入数据并保存在数组中
- 网络术语大扫盲2007版
- 营销/网赚/seo/淘宝资料收集下载
- 两条平行线之间的距离
- Linux简介和各发行版介绍
- 计算机中URL是指什么 ?
- 毕业论文使用Endnote技巧(设置引用格式为国标、参考文献排列顺序)
- c语言字符串求n的阶乘,C语言求n的阶乘(n!)