Nacos共享配置(shared-configs)和扩展配(extension-config)

news/2024/12/19 11:21:34/文章来源:https://www.cnblogs.com/chengfaying/p/18616785

原文地址:https://www.jianshu.com/p/8715072d3f4c

一、共享配置(shared-configs)和扩展配(extension-config)

日常开发中,多个模块可能会有很多共用的配置,比如数据库连接信息,Redis 连接信息,RabbitMQ 连接信息,监控配置等等。那么此时,我们就希望可以加载多个配置,多个项目共享同一个配置之类等功能,Nacos Config 也确实支持。

Nacos在配置路径spring.cloud.nacos.config.extension-config下,允许我们指定⼀个或多个额外配置。

Nacos在配置路径spring.cloud.nacos.config.shared-configs下,允许我们指定⼀个或多个共享配置。

上述两类配置都⽀持三个属性:data-id、group(默认为字符串DEFAULT_GROUP)、refresh(默认为true)。

1.1 版本说明

Nacos:2.0.0
spring-cloud.version:Hoxton.SR9
spring-boot.version:2.3.6.RELEASE
alibaba.cloud.version:2.2.3.RELEASE

1.2 maven依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.3.RELEASE</version>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.3.RELEASE</version>
</dependency>

1.3 配置文件将application改成bootstrap

application.yml作用域在于当前应用有效,bootstrap.yml系统级别的配置有效(一般采用远程配置的时候才会用到)。

因此,将项目中原来的application.yml、application-dev.yml对应改成bootstrap.yml、bootstrap-dev.yml 。

二、配置实例

spring:application:name: nacos-config-multimain:allow-bean-definition-overriding: truecloud:nacos:username: ${nacos.username}password: ${nacos.password}config:server-addr: ${nacos.server-addr}namespace: ${nacos.namespace}# 用于共享的配置文件shared-configs:- data-id: common-mysql.yamlgroup: SPRING_CLOUD_EXAMPLE_GROUP- data-id: common-redis.yamlgroup: SPRING_CLOUD_EXAMPLE_GROUP- data-id: common-base.yamlgroup: SPRING_CLOUD_EXAMPLE_GROUP# 常规配置文件# 优先级大于 shared-configs,在 shared-configs 之后加载extension-configs:- data-id: nacos-config-advanced.yamlgroup: SPRING_CLOUD_EXAMPLE_GROUPrefresh: true- data-id: nacos-config-base.yamlgroup: SPRING_CLOUD_EXAMPLE_GROUPrefresh: true

参数解析:

data-id : Data Id
group:自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
refresh: 控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。
注意:这里的Data ID后面是加.yaml后缀的,且不需要指定file-extension。

三、共享配置和扩展配置的区

实际上,Nacos中并未对extension-configs和shared-configs的差别进⾏详细阐述。我们从他们的结构,看不出本质差别;除了优先级不同以外,也没有其他差别。那么,Nacos项⽬组为什么要引⼊两个类似的配置呢?我们可以从当初该功能的需求(issue)上找到其原始⽬的。

3.1 Nacos对配置的默认理念

namespace区分环境:开发环境、测试环境、预发布环境、⽣产环境。
group区分不同应⽤:同⼀个环境内,不同应⽤的配置,通过group来区分。

3.2 主配置是应⽤专有的配置

因此,主配置应当在dataId上要区分,同时最好还要有group的区分,因为group区分应⽤(虽然dataId上区分了,不⽤设置group也能按应⽤单独加载)。

3.3 要在各应⽤之间共享⼀个配置,请使⽤上⾯的 shared-configs

因此按该理念,shared-configs指定的配置,本来应该是不指定group的,也就是应当归⼊DEFAULT_GROUP这个公共分组。

3.4 如果要在特定范围内(⽐如某个应⽤上)覆盖某个共享dataId上的特定属性,请使⽤ extension-config

⽐如,其他应⽤的数据库url,都是⼀个固定的url,使⽤shared-configs.dataId = mysql的共享配置。但其中有⼀个应⽤ddd-demo是特例,需要为该应⽤配置扩展属性来覆盖。

spring:application:name: ddd-demo-servicecloud:nacos:config:server-addr: nacos-2.nacos-headless.public.svc.cluster.local:8848namespace: ygjpro-test2group: ddd-demo......shared-configs[3]:data-id: mysql.yamlrefresh: true......extension-configs[3]:data-id: mysql.yamlgroup: ddd-demorefresh: true
```**********3.5 关于优先级**
1、上述两类配置都是数组,对同种配置,数组元素对应的下标越⼤,优先级越⾼。也就是排在后⾯的相同配置,将覆盖排在前⾯的同名配置。同为扩展配置,存在如下优先级关系:extension-configs[3] > extension-configs[2] > extension-configs[1] > extension-configs[0。同为共享配置,存在如下优先级关系:shared-configs[3] > shared-configs[2] > shared-configs[1] > shared-configs[0]。2、不同种类配置之间,优先级按顺序如下:主配置 > 扩展配置(extension-configs) > 共享配置(shared-configs)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android emulator 设置代理

android emulator 设置代理 由于开发的 app 需要访问 google 服务,那么跑虚拟机的时候就需要设置网络代理,试了几种方法都没成功,记录一下 因为已知我开发电脑的代理地址和端口,只需要把电脑的代理设置到 emulator 上就可以了 设置Android Studio代理 先在Android Studio上…

Redux Thunk深入理解与使用指南

一、什么是 Redux Thunk? 在 React 应用中,Redux 是一个常用的状态管理工具。但 Redux 本身是一个纯同步状态管理工具,它的 dispatch 方法默认只支持同步操作。如果我们想要处理异步逻辑(如请求接口、延时操作等),需要使用中间件(middleware)。Redux Thunk 就是一个用于…

无人车队运营需要的远程驾驶平台

无人车队在全时商业化运营的过程中,不可避免会出现自动驾驶无法处理的极端、异常场景。为提高运营效率,避免配备随车安全员带来的成本上升与风险增加,使用远程驾驶系统对无人车队运营进行辅助是较为经济且可靠的解决方案。经纬恒润远程驾驶系统具备丰富的功能和宽广的能力覆…

求职者必备:如何用管理软件实现高效的Offer规划

一、毕业季Offer规划的复杂性 毕业季的Offer规划不仅仅是简单的找工作过程,更是一次紧张的时间赛跑。从投递简历、面试安排、薪资谈判到最终的决定,整个过程充满了大量的任务和步骤。这些任务和环节涉及不同的公司、职位要求、面试形式以及其他各种变量。如果没有一个高效的工…

函数式接口之方法作为参数

在现实开发中,肯定会遇到这样一种情况,有几个业务场景,里面的大部分业务逻辑都一样,只有某些逻辑不同,而这些不同的逻辑又依赖于前面的逻辑,你会选择写重复代码去实现还是选择抽取公共方法,对那些不同的逻辑做单独处理?是不是理解起来比较抽象,简单就一句话,怎么把方…

胖东来成功背后的管理智慧:零售行业如何借鉴?

零售行业通过选择合适的看板软件、实施看板管理以及持续优化与改进等步骤,可以实现管理优化和效率提升。这将有助于企业更好地应对市场竞争、提高客户满意度和实现可持续发展。胖东来创始人于东来在社交平台分享了胖东来商贸集团2024年的营业情况。数据显示,截至2024年11月26…

旅游公司各部门联动,何种办公软件能高效协同?

在旅游行业蓬勃发展且竞争日益激烈的当下,高效的团队协作与个人学习效率提升成为旅游公司脱颖而出的关键因素。尤其是对于 MBTI 类型中倾向于有序规划的 J 人而言,可视化的团队协作办公软件犹如得力助手,能够让复杂的旅游业务流程清晰呈现,促进信息的高效流通与任务的顺利推…

linux操作系统安装

1.centenos镜像文件下载 2.创建一个虚拟机 1)打开VMware软件,选择创建新的虚拟机,在弹出的虚拟机向导的窗口选择自定义配置,点击下一步;2)默认设置3)选择稍后安装系统4)客户机操作系统选择Linux,版本选择CentOS 7(64位)5)命名虚拟机,选择存储路径6)处理器配置根据…

如何在宝塔面板中检查和开启path_info支持?

在宝塔面板中,检查和开启path_info支持的步骤如下:登录宝塔面板:打开浏览器,输入宝塔面板的地址(例如:http://你的域名:8888),使用管理员账号登录。进入网站管理页面:在宝塔面板首页,找到你需要配置的网站,点击“设置”按钮。进入PHP设置:在网站设置页面中,找到“…

大模型平台汇总说明

国外大模型平台 Openapi Anthropic Meta google国内大模型平台 百度 文心一言厂商 模型地址优势百度 文心一言 https://yiyan.baidu.com/ 支持文生图支持联网支持图生文支持读取文档支持生成图表商业信息查询生成思维导图 本文来自博客园,作者:王竹笙,转载请注明原文链接:…

规划新一年,提升效率:跨年日程管理与计划软件的完美结合

一、跨年日程规划的挑战 跨年作为时间的节点,往往意味着新的开始。许多人在这一时期都会进行新一年的规划,制定目标、任务和行动计划。无论是个人的生活规划,还是团队或公司的年度战略,跨年日程规划面临的挑战主要包括:1.1 任务繁多,易遗漏 跨年日程通常包含从目标设定、…

Angular 打包 ng build 不压缩混淆

`ng build` 后,`js` 代码被压缩混淆了,好像不太利于学习,何解?ng build 后,js 代码被压缩混淆了,好像不太利于学习,何解?无解??? 非也,非也。 试试 ng build --help, 何如?可解,可解。 Angular 微微抬头,语重心长曰:“小伙子,运行这个命令 —— ng build -c …