Spring Cloud Alibaba Nacos Config - - - >多配置文件/共享配置

news2024/10/6 14:36:37

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【eth uniswap】uniswap 自动路径(Auto Router)错误导致的swap超大损耗

____tz_zs 2022-06-09 稿 对于同时有v2池子和v3池子的Token&#xff0c;感觉最近uniswap的app的自动路由寻址&#xff08;Auto Router&#xff09;有点问题&#xff0c;找的永远是v3的&#xff08;如示例caw/weth&#xff09;池子。此时的情况是v3池子很小&#xff0c;只有几十…

用 HarmonyOS ArkUI 来开发一个健康饮食应用

本文演示如果在DevEco Studio 3里面&#xff0c;用HarmonyOS的ArkUI来开发一个健康饮食应用。体验HarmonyOS 3最新API 9&#xff01; 获取HarmonyOS应用 HarmonyOS的ArkUI来开发一个健康饮食的ArkUI程序“ArkUIHealthyDiet”&#xff0c;基础代码已经有了[1]&#xff0c;个人…

【数据结构初阶】八大排序算法+时空复杂度

学会控制自己是人生的必修课 文章目录一、插入排序1.直接插入排序2.希尔排序二、选择排序1.直接选择排序2.堆排序&#xff08;已经建好堆的基础之上&#xff09;三、交换排序&#xff08;Swap&#xff09;1.冒泡排序&#xff08;大学牲最熟悉的排序&#xff09;2.快速排序&…

Python 数据库开发实战-Mac系统下通过homebrew安装Redis数据库

此文章的前置条件是 “Mac系统已安装过Homebrew”&#xff0c;如果未安装&#xff0c;可访问 “Mac 安装 homebrew 详细教程” 一文&#xff0c;详细介绍Homebrew的用法。利用 “Homebrew” 对 “Redis” 进行安装管理&#xff0c;那是一个方便啊。 利用 homebrew 安装 Redis …

【Windows逆向】【Qt】日志信息打印

▒ 目录 ▒&#x1f6eb; 导读需求开发环境1️⃣ 示例程序Demo2️⃣ 编写功能&#xff08;QtCreator版本&#xff09;3️⃣ 编写功能&#xff08;VS版本&#xff09;&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 需求 调试是编程中常见的定位手段&#xf…

字节一面,操作系统这题没答好,可惜了

问题引入&#xff1a; 在曾经我们学习Linux的经历中&#xff0c;我们也是多次使用信号的。比如&#xff1a;当我们在使用xshell时&#xff0c;在命令行中按Ctrlc&#xff0c;这个键盘输入产生了一个硬件中断&#xff0c;被操作系统获取&#xff0c;解释成信号&#xff0c;发送…

两百行C++代码实现yolov5车辆计数部署(通俗易懂版)

这周用opencv简单实现了一下基于yolov5检测器的车辆计数功能&#xff0c;方法是撞线计数&#xff0c;代码很简单一共就两百多行&#xff0c;测试视频是在b站随便下载的。注&#xff1a;该代码只能演示视频demo效果&#xff0c;一些功能未完善&#xff0c;离实际工程应用还有距离…

JMeter整体综述

JMeter整体综述1. JMeter体系结构及运行原理1.1 主要的组件1.2 运行原理2. 元件执行顺序和作用域2.1 元件执行顺序2.2 元件执行作用域3. 参考1. JMeter体系结构及运行原理 负载模拟&#xff1a;负责模拟用户请求。如取样器有参数化的需求&#xff0c;可通过配置元件或前置处理器…

15.JavaScript 01

文章目录一、概念二、功能三、 JavaScript发展史四、 ECMAScript&#xff1a;客户端脚本语言的标准1、基本语法1. 与html结合方式2. 注释3. 数据类型4. 变量5. 运算符6. 流程控制语句7. JS特殊语法8. 练习&#xff1a;99乘法表2、基本对象1. Function&#xff1a;函数(方法)对象…

上线3天,下载4万,ChatGPT 中文版VSCode插件来了

ChatGPT 的 Debug 功能&#xff0c;有人应用化了。 ChatGPT 这几天可谓是风头无两。作为一个问答语言模型&#xff0c;它最大的优点就是可以回答与编程相关的问题&#xff0c;甚至回复一段代码。 尽管有人指出 ChatGPT 生成的代码有错误&#xff0c;但程序员们还是对它写代码、…

图像配准开源数据集资源汇总

Brown 数据集 数据集下载链接&#xff1a;http://suo.nz/3042bh 数据集由 1024 x 1024 位图 (.bmp) 图像组成&#xff0c;每个图像包含一个 16 x 16 图像块阵列。每个补丁都被采样为 64 x 64 灰度&#xff0c;具有规范的比例和方向。 ETHZ Toys 数据集下载链接&#xff1a…

Java中的语法糖(真甜)

什么是语法糖&#xff08;Syntactic sugar&#xff09; 语法糖是一个计算机数据&#xff0c;特指在编程语言中添加的某种语法&#xff0c;这种语法对语言的功能没有影响&#xff0c;但是更方便程序员使用。语法糖让程序更加简洁&#xff0c;有更高的可读性。 糖嘛&#xff0c…

08.DashBoard流监控配置

08.DashBoard流监控配置 每个服务提供者都需要实现actuator&#xff0c;才可以实现流量监控。 导入Maven依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId><…

【图像去噪】空域+频域滤波图像去噪【含GUI Matlab源码 914期】

⛄一、获取代码方式 获取代码方式1&#xff1a; 完整代码已上传我的资源&#xff1a;【图像去噪】基于matlab GUI空域频域滤波图像去噪【含Matlab源码 914期】 获取代码方式2&#xff1a; 通过订阅紫极神光博客付费专栏&#xff0c;凭支付凭证&#xff0c;私信博主&#xff0…

移动端防抓包实践

目录介绍 01.整体概述介绍 1.1 项目背景1.2 思考问题1.3 设计目标1.4 收益分析 02.市面抓包的分析 2.1 Https三要素2.2 抓包核心原理2.3 搞定CA证书2.4 突破CA证书校验2.5 如何搞定加解密2.6 Charles原理2.7 抓包原理图2.8 抓包核心流程 03.防止抓包思路 3.1 先看如何抓包3.2 …

C++计算机视觉库OpenCV在Visual Studio 2022的配置方法

本文介绍在Visual Studio 2022中配置、编译C 计算机视觉库OpenCV的方法。 1 OpenCV库配置 首先&#xff0c;我们进行OpenCV库的下载与安装。作为一个开源的库&#xff0c;我们直接在其官方下载网站&#xff08;https://opencv.org/releases/&#xff09;中进行下载即可&#x…

实现无入侵式C++代码mock工具

为了实现真正无侵入式的mock&#xff0c;我们基于开源Hook框架Frida-gum提供的API&#xff0c;利用C模板进行封装&#xff0c;作者编写了一个简单实用的mock工具&#xff0c;在此开源分享&#xff08;代码详见附录&#xff09;。背景在单元测试中&#xff0c;往往需要减少被测函…

如何实现高性能网络编程-ChatGPT怎么看

hi ,大家好&#xff0c;我是大师兄。听说最近chatgpt特别火&#xff0c;那我们邀请一下chatgpt如何实现&#xff1a;我们先来小试牛刀&#xff1a;刚开始用先用英文交流一下&#xff0c;然后试一下中文&#xff1a;元芳你怎么看&#xff1f;下期直播主题--网络编程 (如何实现高…

用 AWTK 和 AWPLC 快速开发嵌入式应用程序 (7)- 用状态机实现红绿灯

AWPLC 目前还处于开发阶段的早期&#xff0c;写这个系列文章的目的&#xff0c;除了用来验证目前所做的工作外&#xff0c;还希望得到大家的指点和反馈。如果您有任何疑问和建议&#xff0c;请在评论区留言。 1. 背景 AWTK 全称 Toolkit AnyWhere&#xff0c;是 ZLG 开发的开源…

kaggle实战:基于超市消费数据的用户个性化分析案例

大家好&#xff0c;今天给大家分享一篇 kaggle 数据集的新文章&#xff1a;基于一份超市消费数据集的用户个性化分析以及用户分群的实现。 更多详细内容参考原数据集地址&#xff1a; https://www.kaggle.com/code/sonalisingh1411/customer-personality-analysis-segmentati…