• Nacos 自定义扩展的 Data Id 配置


    1. 添加依赖

    要想从配置中心获取配置添加nacos-confifig的依赖:

    <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    注意:要使用配置中心就要在bootstrap.yml中来配置,bootstrap.yml配置文件的加载顺序要比application.yml要 优先。

    使用application.yml加载不到配置中心了就。

    image-20220720120303334

    在bootstrap.yml添加配置:

    server:
      port: 56020
    
    #配置服务提供方的地址(ip和端口)
    provider:
      address: 127.0.0.1:56010
    
    spring:
      application:
        name: nacos-restful-consumer #服务名
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848  #服务发现中心地址
    #        namespace: f5eec3c1-4f05-40cd-964a-c8d44f342ab4 #指定命名空间的id
          config:
            server-addr: 127.0.0.1:8848  #配置中心地址
            file-extension: yaml  #指定配置文件的扩展名,配置文件名称根据application.name的名称加扩展名拼装,为nacos-restful-consumer.yaml
            group: DEFAULT_GROUP
           
    nacos-restful-provider:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在nacos-restful-consumer工程的controller中增加获取配置的web访问端点/confifigs,通过标准的spring @Value 方式。

    @Value("${common.name}")
    private String common_name;
    
    @Autowired
    ConfigurableApplicationContext applicationContext;
    
    @GetMapping(value = "/configs")
    public String getvalue(){
        // return common_name;
        String name =  applicationContext.getEnvironment().getProperty("common.name");
        String addr = applicationContext.getEnvironment().getProperty("common.addr");
        return name+"|"+addr;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    我们通过nacos控制台更新common.name的配置值,再次访问web端点/confifigs,发现应用程序能够获取到最新

    的配置值,说明spring-cloud-starter-alibaba-nacos-confifig 支持配置的动态更新。

    注意:可以通过配置spring.cloud.nacos.confifig.refresh.enabled=false来关闭动态刷新

    2. ext-config扩展配置

    ext:extend,也就是扩展配置

    Spring Cloud Alibaba Nacos Confifig可支持自定义 Data Id 的配置。 一个完整的配置案例如下所示:

    spring:
      application:
        name: nacos-restful-consumer #服务名
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848  #服务发现中心地址
            namespace: f5eec3c1-4f05-40cd-964a-c8d44f342ab4 #指定命名空间的id
          config:
            server-addr: 127.0.0.1:8848  #配置中心地址
            file-extension: yaml  #指定配置文件的扩展名,配置文件名称根据application.name的名称加扩展名拼装,为nacos-restful-consumer.yaml
            group: DEFAULT_GROUP
            # config external configuration 
            # 1、Data Id group:组名,refresh:动态刷新
            ext-config[0]:
              data-id: ext-config-common01.yaml
              group: COMMON_GROUP
              refresh: true
            ext-config[1]:
              data-id: ext-config-common02.yaml
              group: COMMON_GROUP
              refresh: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    可以看到:

    通过 spring.cloud.nacos.config.ext-config[n].data-id 的配置方式来支持多个 Data Id 的配置。

    通过 spring.cloud.nacos.config.ext-config[n].group 的配置方式自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。

    通过 spring.cloud.nacos.config.ext-config[n].refresh 的配置方式来控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的。

    注意: spring.cloud.nacos.config.ext-config[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。

    测试:

    配置ext-confifig-common01.yaml:

    image-20220720104141686

    要写的我放这了,复制就行了,不用跟着图片打了:

    ext-config-common01.yaml
    
    COMMON_GROUP
    
    common:
      name: yyl
      addr: jiuzhou
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    配置ext-confifig-common02.yaml:

    image-20220720110217384

    编写测试代码:

    @Value("${common.name}")
    private String common_name;
    
    @Autowired
    ConfigurableApplicationContext applicationContext;
    
    @GetMapping(value = "/configs")
    public String getvalue(){
          return common_name;
        String name =  applicationContext.getEnvironment().getProperty("common.name");
        String addr = applicationContext.getEnvironment().getProperty("common.addr");
        return name+"|"+addr;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    重启nacos-restful-consumer工程

    访问:http://127.0.0.1:56020/confifigs

    image-20220720123445630

    通过测试发现:

    • 扩展配置优先级是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,优先级越高。

    • 通过内部相关规则(应用名、扩展名 )自动生成相关的 Data Id 配置的优先级最大。

  • 相关阅读:
    Qt 线程串口
    docker install private registry 【docker 安装 registry & 仅证书认证】
    C语言:文件操作(2)
    C++中调用matplotlibcpp.h画图测试笔记
    C++——入门详解(上)
    vue实现stompjs+websocket和后端通信(二)
    .Net Core后端架构实战【介入IOC控制反转】
    JavaScript 虚拟键盘:Mindfusion JavaScript Keyboard
    python基础(五)输入和while
    Linux部署SpringBoot项目
  • 原文地址:https://blog.csdn.net/weixin_45525272/article/details/125889879