Nacos共享配置

参考:Nacos(七):Nacos共享配置_LarsCheng's Blog-CSDN博客_nacos共享配置

图文详述Nacos配置中心使用:应用间配置共享、扩展配置文件加载优先级、新老版本差异_Saintmm的博客-CSDN博客_nacos shared-configs 不生效

我的环境

  • Windows10
  • JDK8
  • SpringCloud:Hoxton.SR9
  • SpringBoot:2.3.9.RELEASE
  • spring-cloud-alibaba-dependencies:2.2.3.RELEASE
  • Nacos-server:2.0.3

场景描述

一个项目中服务数量增加后,配置文件相应增加,多个配置文件中会存在相同的配置,那么我们可以将相同的配置独立出来,作为该项目中各个服务的共享配置文件,每个服务都可以通过Nacos进行共享配置的读取

下面用一个demo演示下,是否可行

demo工程:nacos-config-share
配置文件:nacos-config-share.yml
共享配置文件:shareconfig1.yml,shareconfig2.yml

创建项目

 创建聚合工程springcloud-nacos, pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cloud</groupId>
    <artifactId>springcloud-nacos</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>nacos-config-share</module>
    </modules>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <worldskills.version>1.1.0</worldskills.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-boot.version>2.3.9.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

创建子工程nacos-config-share, maven坐标:

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

创建配置类:NacosShareConfig

@Data
@RefreshScope
@Configuration
@ConfigurationProperties(prefix = "nacos.config")
public class NacosShareConfig {

    private String nacosConfigShare;
    /**
     * 共享配置
     */
    private String shareConfig1;

    private String shareConfig2;

    /**
     * 扩展共享配置
     */
    private String shareConfig3;

    private String shareConfig4;
}

控制器:NacosConfigShareController

@RestController
@RequestMapping("/share")
public class NacosConfigShareController {

    @Autowired
    private NacosShareConfig nacosShareConfig;

    @RequestMapping("/getConfigShare")
    public String getConfigShare() {
        return nacosShareConfig.getNacosConfigShare();
    }

    @RequestMapping("/getShareConfig1")
    public String getShareConfig1() {
        return nacosShareConfig.getShareConfig1();
    }

    @RequestMapping("/getShareConfig2")
    public String getShareConfig2() {
        return nacosShareConfig.getShareConfig2();
    }

    @RequestMapping("/getShareConfig3")
    public String getShareConfig3() {
        return nacosShareConfig.getShareConfig3();
    }

    @RequestMapping("/getShareConfig4")
    public String getShareConfig4() {
        return nacosShareConfig.getShareConfig4();
    }
}

配置文件:bootstrap.yml

spring:
  application:
    name: nacos-config-share
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.194.128:8848
      config:
        server-addr: 192.168.194.128:8848
        prefix: ${spring.application.name}
        file-extension: yml
        #旧共享配置方式+动态刷新
#        shared-dataids: shareconfig1.yml,shareconfig2.yml
#        refreshable-dataids: shareconfig1.yml,shareconfig2.yml
        #新的共享配置+动态刷新
        shared-configs:
          - data-id: shareconfig1.yml
            group: DEFAULT_GROUP
            refresh: true #动态刷新配置开启
          - data-id: shareconfig2.yml
            group: DEFAULT_GROUP
            refresh: false #动态刷新配置关闭

从配置文件可以看出,通过shared-dataids属性来指定要读取共享配置文件的DataID,多个文件用,分隔使用refreshable-dataids指定共享配置文件支持自动刷新

shared-dataids/refreshable-dataids官方标记废弃了

Nacos新建配置文件 

这里我们作为演示,暂不加入Namespace,直接在公共空间中创建及测试

创建配置文件nacos-config-share.yml,详细如下:

  • DataId:nacos-config-share.yml
  • 配置格式:YAML
  • 配置内容:
    server:
        port: 9984
    nacos:
        config:
            nacosConfigShare: nacos-config-share

创建共享配置文件1shareconfig1.yml,详细如下:

  • DataId:shareconfig1.yml
  • 配置格式:YAML
  • 配置内容:
    nacos:
        config:
            shareConfig1: 这里是共享配置文件1

创建共享配置文件1shareconfig2.yml,详细如下:

  • DataId:shareconfig2.yml
  • 配置格式:YAML
  • 配置内容:
    nacos:
        config:
            shareConfig2: 这里是共享配置文件2

创建成功后,配置列表如下图:

 

 启动测试

访问控制器提供的接口

http://localhost:9984/share/getConfigShare   #nacos-config-share
http://localhost:9984/share/getShareConfig1  #这里是共享配置文件1
http://localhost:9984/share/getShareConfig2  #这里是共享配置文件2

再测试下共享配置的自动刷新是否生效,shareconfig1.yml的refresh:true  预期会生效,shareconfig2.yml的refresh:false不生效

在Nacos控制台中修改共享配置文件shareconfig1.yml的值为:这里是共享配置文件1-测试动态刷新是否生效

编辑保存后,重新请求 http://localhost:9984/share/getShareConfig1 ,观察返回结果如下:
 

这里是共享配置文件1-测试动态刷新是否生效

  重新请求 http://localhost:9984/share/getShareConfig2 ,观察返回结果如下:

这里是共享配置文件2

需求变更

假设现在要读取shareconfig3.yml和shareconfig4.yml文件但是它的Group为SHARE3_GROUP和SHARE4_GROUP, 即共享配置文件与项目自身配置文件不在同一Group中(上边的例子是全都在DEFAULT_GROUP分组) 那如果继续用上边的方法,就无法读取共享配置文件

这时可以使用另一个配置ext-config,它可以由用户自定义指定需要加载的配置DataID、Group以及是否自动刷新

并且ext-config是一个集合(List),支持多个配置文件的指定。

注:ext-config官方标记废弃;取而代之的是extension-configs

新建共享配置文件

先创建配置配置文件shareconfig3.ymlshareconfig4.yml,注意他们的Group属性

  • DataId:shareconfig3.yml
  • Group:SHARE3_GROUP
  • 配置格式:YAML
  • 配置内容:
    nacos:
        config:
            shareConfig3: 这里是共享配置文件3,Group:SHARE3_GROUP
  • DataId:shareconfig4.yml
  • Group:SHARE4_GROUP
  • 配置格式:YAML
  • 配置内容:
    nacos:
        config:
            shareConfig4: 这里是共享配置文件4,Group:SHARE4_GROUP

创建成功页面如下:

 

修改项目配置文件bootstrap.yml,增加ext-config(旧),extension-configs(新)

配置

spring:
  application:
    name: nacos-config-share
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.194.128:8848
      config:
        server-addr: 192.168.194.128:8848
        prefix: ${spring.application.name}
        file-extension: yml
        #旧共享配置方式+动态刷新
#        shared-dataids: shareconfig1.yml,shareconfig2.yml
#        refreshable-dataids: shareconfig1.yml,shareconfig2.yml
        #新的共享配置+动态刷新
        shared-configs:
          - data-id: shareconfig1.yml
            group: DEFAULT_GROUP
            refresh: true #动态刷新配置开启
          - data-id: shareconfig2.yml
            group: DEFAULT_GROUP
            refresh: false #动态刷新配置关闭
        #旧扩展配置方式+动态刷新 + 不同组获取共享配置数据
#        ext-config:
#          - data-id: shareconfig3.yml
#            group: SHARE3_GROUP
#            refresh: true
#          - data-id: shareconfig4.yml
#            group: SHARE4_GROUP
#            refresh: true
        #新的扩展配置方式 + 动态刷新 + 不同组获取共享配置数据
        extension-configs:
          - data-id: shareconfig3.yml
            group: SHARE3_GROUP
            refresh: true #动态刷新配置开启
          - data-id: shareconfig4.yml
            group: SHARE4_GROUP
            refresh: false #动态刷新配置关闭

启动进行测试 

项目经过修改后,可以看到

  1. 项目自身的nacos配置文件属于DEFAULT_GROUP下,默认读取
  2. shareconfig1.yml,shareconfig2.yml 都属于DEFAULT_GROUP下,通过shared-dataids(旧)/shared-configs(新)指定进行读取
  3. shareconfig3.yml,shareconfig4.yml 都属于非DEFAULT_GROUP下,通过ext-config(旧)/extension-configs(新)配置属性进行自定义读取

启动项目,测试所有的配置文件是否可以正常读取 

http://localhost:9984/share/getConfigShare   #nacos-config-share
http://localhost:9984/share/getShareConfig1  #这里是共享配置文件1
http://localhost:9984/share/getShareConfig2  #这里是共享配置文件2
http://localhost:9984/share/getShareConfig3  #这里是共享配置文件3,Group:SHARE3_GROUP
http://localhost:9984/share/getShareConfig4  #这里是共享配置文件4,Group:SHARE4_GROUP

修改shareconfig3.yml的配置内容为:这里是共享配置文件3,Group:SHARE3_GROUP- 测试扩展配置是否支持动态刷新,保存后,再次调用http://localhost:9984/share/getShareConfig3,返回如下:

这里是共享配置文件3,Group:SHARE3_GROUP - 测试扩展配置是否支持动态刷新 

调用接口后发现,两种共享配置的加载方式都可以正常读取,并且可以一起使用。extension-configs的方式实现了用户自定义配置共享配置文件。 

总结

上面的demo已经演示Nacos共享配置的两种实现方式,两种方式针对不同的场景,总结如下:

  • shared-configs方式:
    • 适合于共享配置文件与项目默认配置文件处于相同Group时,直接两条命令就可以搞定
    • 优点:配置方便
    • 缺点:只能在同一Group中
  • ext-config方式:
    它可以由开发者自定义要读取的共享配置文件的DataId、Group、refresh属性,这样刚好解决了shared-dataids存在的局限性。
    优点:可以与shared-dataids方案结合使用,用户自定义配置。灵活性强
    缺点:配置容易出错,要熟悉YAML语法
    
    
    

 

Nacos配置管理——配置共享 这样,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。可以看出来,不管是dev,还是test环境,都读取到了envSharedValue这个属性的值。profile就是你设置的当前的运行环境前缀名,比如说刚才的dev,test。,例如userservice-dev.yaml。,例如userservice.yaml。不包含环境,因此可以被多个环境共享。下面我们通过案例来测试配置共享。...... 阅读详情

相关推荐

Nacos学习】五、Nacos共享配置

前言 一个项目中服务数量增加后,配置文件相应增加,多个配置文件中会存在相同的配置,那么我们可以将相同的配置独立出来,作为该项目中各个服务的共享配置文件,每个服务都可以通过Nacos进行共享配置的读取 新建项目 创建名为【nacos-share】的子服务,用来测试Nacos共享配置功能。 pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"

qq_37634156的博客 5464

SpringCloud 核心组件Nacos配置热更新&配置共享】第5章

nacos配置中心:实现热更新的两种方式,多环境共享配置,多服务共享配置

日常学习总结 4451

微服务3——服务的配置Nacos服务配置中心 )

小节面试分析 1、什么是配置中心?存储项目配置信息的一个服务,集中管理配置信息,动态发布配置信息。功能就是当某个配置项发生变更时,不停机就可以动态刷新服务内部的配置项 2、市场上有哪些主流的配置中心? 市场上主流配置中心有Apollo(携程开源)--携程开源的阿波罗,nacos(阿里开源),Spring Cloud Config(Spring Cloud 全家桶成员)。 ...

ss 的博客 1619

(超详细)关于Nacos共享配置( shared-configs)和拓展配置(extension-config)

实际工作开发中,对于模块较多的项目,一般都会使用Redis、Mq、公共数据库连接等信息,同时不同模块可能需要连接特定的数据库和配置信息,如果每个模块都使用自己的配置文件本身是没什么问题,只是一旦改动的话,需要每个配置文件都修改,一是麻烦,更主要的是风险大,比如改错或者漏改,损失的都是白花花的银子。如果各应⽤之间共享⼀个配置,请使⽤上⾯的 shared-configsshared-configs指定的配置,本来应该是不指定group的,也就是应当归⼊DEFAULT_GROUP这个公共分组。

weixin_42329623的博客 1万+

Nacos使用实践

本文主要整理了如何使用nacos作为微服务的注册中心、配置中心以及开启鉴权。

qq_32238611的博客 3332

Nacos 配置共享文件 如何在Nacos配置共享文件

以数据库ip为例,${hm.db.host:192.168.150.101}表示如果没有配置hm.db.host,则默认以192.168.150.101为ip地址,端口号、账号和密码同理!将共享文件配置完后,应该如何让每一个服务在启动时去nacos拉取这些信息呢?,因此可以抽取出来放到 Nacos 配置中心,供多个服务共享。抽取出来,并在 Nacos 配置中心进行。这些配置如果每个服务都单独维护,不仅。,避免每次修改配置都需要重启服务。在每一个服务中,我们希望将一些。里,否则无法加载共享配置

qq_74421990的博客 2168

nacos中的配置共享和热更新

在你的每个微服务中,某些业务配置配置文件中写死了,每次修改都要重启服务,而且每个微服务都有很多重复的配置,维护成本高。nacos中的配置共享配置热跟新可以帮助我们解决这些问题,是我们的开发更加简洁!微服务共享配置可以统一交给Nacos保存和管理,在Nacos控制台修改配置后,Nacos会将配置变更推送给相关的微服务,并且无需重启即可生效,实现配置热更新。网关的路由同样是配置,因此同样可以基于这个功能实现动态路由功能,无需重启网关即可修改路由配置。首先默认你已经创建了自己的微服务。

weixin_62286800的博客 2208

Nacos Config 支持配置共享

一、什么是配置中心 二、Nacos Config 2.1 Nacos Config 工作原理 (★) 2.2 Nacos Config 的使用 2.3 动态刷新 2.4 配置共享 2.4.1 同一个微服务的不同环境之间共享配置 2.4.2 不同微服务中间共享配置

秀岩的博客 1985

nacos配置共享

3.2在抽取的模块新建bootstrap.yaml。2.3更新swagger配置。2.1共享jdbc配置

qq_62405215的博客 243

Nacos(七):Nacos共享配置

前言 前景回顾: Nacos(六):多环境下如何“管理”及“隔离”配置和服务 Nacos(五):多环境下如何“读取”Nacos中相应环境的配置 Nacos(四):SpringCloud项目中接入Nacos作为配置中心 前几章已经基本介绍了springcloud项目结合Nacos的大部分用法,本文介绍一下Nacos作为配置中心时,如何读取共享配置 我的环境 Windows10 JDK8 Sp...

LarsCheng's Blog 2万+

Nacos如何共享配置

Nacos配置共享的几种方式:1)通过shared-configs引入公共DataId;2)使用Group管理不同服务的公共配置;3)利用Namespace隔离多环境配置;4)组合多配置文件,按优先级加载。核心思路是将公共配置集中管理,通过不同维度实现灵活共享,同时保证环境隔离和配置一致性。

持续输出Java相关知识 477

nacos 共享配置一般设置

nacos 共享配置 系统之间有相同的配置 如 DB配置,日志配置等,可以用下面方法加载 加载多个配置 spring.cloud.nacos.config.ext-config[0].data-id=db.yaml spring.cloud.nacos.config.ext-config[0].group=DEFAULT_GROUP spring.cloud.nacos.config.ext-config[0].refresh=true ... 共享配置 spring.cloud.nacos.conf

youngboy的博客 1726

Nacos配置的多文件加载与共享配置

对于Nacos作为配置中心的使用,通过之前的几篇博文,我们已经介绍了如何在Nacos中创建配置内容、Nacos配置内容与Spring应用配置之间的对应关系以及实战中多环境下的配置管理方案。 但是,我们实际应用过程中还会经常碰到这样的问题:有时候我们会对应用的配置根据具体作用做一些拆分,存储在不同的配置文件中,除了归类不同的配置之外,也可以便于共享配置给不同的应用。对于这样的需求,Nacos也可以很好的支持,下面就来具体介绍一下,当使用Nacos时,我们如何加载多个配置,以及如何共享配置。 加载多个配置

weixin_42073629的博客 2319

Nacos配置加载和共享配置

Nacos配置加载和共享配置 中文文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config 文章目录Nacos配置加载和共享配置配置文件加载控制页面添加配置bootstrap.properties测试结果共享配置Nacos控制台主程序测试配置的优先级完全关闭配置完整配置参考 通过前两小节,我们已经掌握了Nac...

ouYang的博客 2万+

共享配置配置热更新(Nacos

Nacos是一款聚焦微服务发现、配置与管理的工具,提供动态服务发现、服务配置、服务元数据及流量管理等核心能力。其服务发现与健康检查机制支持DNS与RPC两种发现方式:服务实例启动时向Nacos Server注册自身信息,Nacos Server存储信息并实时监测实例健康状态;当实例故障或异常时,Nacos Server会及时将其从可用列表中移除,保障客户端调用的服务实例可用性,确保服务高可用。动态配置管理是Nacos的核心功能之一,提供中心化配置管理服务。

qq_60309351的博客 1387

06-Nacos-设置共享配置

首先在nacos的控制台配置多个配置文件,注意配置中指定DataID 为 share-config1.properties。

宣晨光 1575

Nacos共享配置配置热更新

SpringCloud在初始化上下文的时候会先读取一个名为bootstrap.yaml(或bootstrap.properties)的文件,如果我们将nacos地址配置到bootstrap.yaml中,那么在项目引导阶段就可以读取nacos中的配置了。由于一些配置shared-jdbc.yaml写过了,bootstrap.yaml里也写了一些,所以application.yml不需要再写了,只要把占位符里的哪些元素写了就行。我们要在微服务拉取共享配置

weixin_74326684的博客 635

SpringCloud-Alibaba之Nacos共享配置、灰度配置

对比我的面经和其他大佬的面经,自己真的是运气好。一个系统中微服务数量增加后,配置文件相应增加,多个配置文件中会存在相同的配置,那么我们可以将相同的配置独立出来,作为该系统中各个服务的共享配置文件,每个服务都可以通过Nacos进行共享配置的读取。配置加载的优先级spring.cloud.nacos.config.shared-dataids参数用来配置多个共享配置的Data Id,多个的时候用用逗号分隔。当我们加载多个配置的时候,如果存在相同的key时,我们需要深入了解配置加载的优先级关系。

2401_83329402的博客 976
上一篇: SpringBoot读取Resource下文件的几种方式
爱上远方
博客等级 码龄11年 10粉丝 · 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值