文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-04 08:54

关注

一、共享配置(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(默认为false)
NacosConfigProperties.class

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-multi  main:    allow-bean-definition-overriding: true  cloud:    nacos:      username: ${nacos.username}      password: ${nacos.password}      config:        server-addr: ${nacos.server-addr}        namespace: ${nacos.namespace}        # 用于共享的配置文件        shared-configs:          - data-id: common-mysql.yaml            group: SPRING_CLOUD_EXAMPLE_GROUP          - data-id: common-redis.yaml            group: SPRING_CLOUD_EXAMPLE_GROUP          - data-id: common-base.yaml            group: SPRING_CLOUD_EXAMPLE_GROUP        # 常规配置文件        # 优先级大于 shared-configs,在 shared-configs 之后加载        extension-configs:          - data-id: nacos-config-advanced.yaml            group: SPRING_CLOUD_EXAMPLE_GROUP            refresh: true          - data-id: nacos-config-base.yaml            group: SPRING_CLOUD_EXAMPLE_GROUP            refresh: true

参数解析:

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

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

实际上,Nacos中并未对extension-configsshared-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-service cloud:   nacos:     config:       server-addr: nacos-2.nacos-headless.public.svc.cluster.local:8848       namespace: ygjpro-test2       group: ddd-demo       ......       shared-configs[3]:         data-id: mysql.yaml         refresh: true       ......       extension-configs[3]:         data-id: mysql.yaml         group: ddd-demo         refresh: true

3.5 关于优先级

上述两类配置都是数组,对同种配置,数组元素对应的下标越⼤,优先级越⾼。也就是排在后⾯的相同配置,将覆盖排在前⾯的同名配置。

同为扩展配置,存在如下优先级关系:extension-configs[3] > extension-configs[2] > extension-configs[1] > extension-configs[0]

同为共享配置,存在如下优先级关系:shared-configs[3] > shared-configs[2] > shared-configs[1] > shared-configs[0]

不同种类配置之间,优先级按顺序如下:主配置 > 扩展配置(extension-configs) > 共享配置(shared-configs)

链接:http://events.jianshu.io/p/8715072d3f4c
来源:简书

来源地址:https://blog.csdn.net/Java_ESS/article/details/129878779

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯