源码地址(重点开源码中的 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 - - - >多配置文件/共享配置相关推荐

  1. nacos 配置动态刷新_使用 Spring Cloud Alibaba Nacos Config 作为配置中心

    什么是 Nacos Config 在分布式系统中,由于服务数量巨多,为了方便服务 配置文件统一管理,实时更新,所以需要分布式配置中心组件. Spring Cloud Alibaba Nacos Con ...

  2. Spring Cloud Alibaba —— Nacos Config 配置中心

    导航 引言 一.什么是配置中心 二.常见的配置中心组件 三.Nacos Config 入门 四.Nacos Config 动态配置 4.1 硬编码方式(默认支持动态生效) 4.2 属性注入 五.配置共 ...

  3. 【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. ...

  4. 【深入了解Spring Cloud Alibaba Nacos:服务注册和配置中心】—— 每天一点小知识

  5. Spring Cloud Alibaba Nacos 分布式配置

    Spring Cloud Alibaba 分布式配置 1. 简介 Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持.使用 Spr ...

  6. Spring Cloud Alibaba Nacos 分布式配置中心

    文章目录 1 摘要 2 核心 Maven 依赖 3 核心代码 3.1 bootstrap 配置文件 3.2 application 配置文件 3.3 配置测试类 - Controller 层 3.4 ...

  7. 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 ...

  8. Spring Cloud Alibaba Nacos Confifig是什么

    Spring Cloud Alibaba Nacos Confifig是Spring Cloud Alibaba的子项目,而Spring Cloud Alibaba是阿里巴巴公司提供的开源的基于Spr ...

  9. Spring Cloud Alibaba Nacos 的 2 种健康检查机制!

    作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) Spring Cloud Alibaba Nacos 作为注册中心不止提供了服务注 ...

  10. Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 11.1 Spring Cloud Alibaba Nacos 概述

    11.1 Spring Cloud Alibaba Nacos 概述 11.1.1 Spring Cloud Alibaba 简介 在一开始,我们先简单介绍下Spring Cloud Alibaba的 ...

最新文章

  1. Python:生成两个日期间的随机日期
  2. 城市智能化发展中,AI公司应该做什么?
  3. linux kernel内存映射实例分析
  4. 【FPGA】单端口RAM的设计(异步读、同步写)
  5. java父线程子线程
  6. 《ES6标准入门》49~68Page 数值的拓展 数组的拓展
  7. 功率增长步长(powerRampingStep)
  8. sql中 set 和select 的区别
  9. 解决 CentOS7 容器 Failed to get D-Bus connection: Operation not permitted
  10. 框架详解_BeetleX框架详解SAEA对象
  11. foreach和IEnumerable+yield和IEnumerator
  12. jsf集成spring_Spring和JSF集成:异常处理
  13. 基于linux 的2048
  14. 特斯拉中国公开统一维保价格
  15. K8S_Google工作笔记0003---K8S核心概念
  16. 基金小白要如何入门?
  17. vue.js 入门案例,双向绑定实现任务清单
  18. nopcommerce插件深度剖析
  19. Bailian3751 地质考察队【最值】
  20. 详解Linux操作系统的系统备份与恢复

热门文章

  1. 域名指向变更后,域名依旧指向老IP问题
  2. 全国计算机比赛图片,我校学子获2020年“中国高校计算机大赛-网络技术挑战赛”全国总决赛一等奖(图)-全国文明校园建设网...
  3. MFC中利用ListControl制作空表格,由键盘输入数据并保存在数组中
  4. 网络术语大扫盲2007版
  5. 营销/网赚/seo/淘宝资料收集下载
  6. 两条平行线之间的距离
  7. Linux简介和各发行版介绍
  8. 计算机中URL是指什么 ?
  9. 毕业论文使用Endnote技巧(设置引用格式为国标、参考文献排列顺序)
  10. c语言字符串求n的阶乘,C语言求n的阶乘(n!)