• SpringCloud Alibaba之Nacos Config 配置中心


    Nacos Config配置中心官方文档

    简介

    Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
    Spring Cloud Alibaba Nacos Config 是 Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

    快速开始

    Nacos 服务端初始化

    建议是使用Nacos提供的数据库配置方式,因为添加的配置会持久化到数据库中

    添加配置

    在这里插入图片描述
    在这里插入图片描述

    3.权限控制

    在这里插入图片描述

    使用权限控制需要开启nacos配置里面的权限配置
    文件位置: */nacos/conf/application.properties
    默认为:false改为:true

    在这里插入图片描述

    整合配置中心

    添加依赖

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

    添加配置文件

    在启动服务之前,必须使用bootstrap.properties 或者 bootstrap.yaml 配置文件来配置Nacos Server 地址
    注意当你使用域名的方式来访问 Nacos 时,spring.cloud.nacos.config.server-addr 配置的方式为 域名:port。 例如 Nacos 的域名为abc.com.nacos,监听的端口为 80,则 spring.cloud.nacos.config.server-addr=abc.com.nacos:80。 注意 80 端口不能省略。

    spring.application.name: nacos-config
    spring.cloud.nacos.config.server-addr: 127.0.0.1:8848
    spring.cloud.nacos.config.file-extension: yaml
    spring.cloud.nacos.config.refresh.enabled: false #来关闭动态刷新,一般用不上

    application.yaml

    server:
      port: 8088
    spring:
      application:
        #application.name 对应的是Nacos Config配置的 DataID application.name的配置可以是配置在application.yaml中也可以配置在bootstrap.yaml中
        #除了默认的配置文件,其他配置文件必须写上后缀
        name: com.nacos.config  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    bootstrap.yaml配置

    #除了配置中心当中的配置会写在bootstrap.yaml中,其他需要的配置一般都是写在application.yaml中
    spring:
      cloud:
        nacos:
          server-addr: localhost:8848   #如果通过域名访问nacos,则 地址为 域名:8848,如果端口号为80,也必须配置,不能省略
          username: nacos
          password: nacos
          config:
            #声明 dataid 文件扩展名 这里配置的文件扩展名是指Nacos Config 配置管理中的配置格式,默认为Properties 只针对默认的配置文件
            #如果使用Properties格式进行配置可以不用指定格式,如果改为其他格式则需要指定文件格式,否则会报错
           file-extension: yaml
    #       refresh:
             #nacos config 的主要特性动态刷新配置信息,当我们更新了配置文件之后程序会在10ms内刷新配置,这里可以手动关闭,但是一般用不上
    #         enabled: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    spring-cloud-starter-alibaba-nacos-config 也支持配置的动态更新,启动 Spring Boot 应用测试的代码如下:

    @SpringBootApplication
    public class ProviderApplication {
    
        public static void main(String[] args) {
            ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
            while(true) {
                //当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
                String userAge = applicationContext.getEnvironment().getProperty("age");
                System.err.println("; age: " + userAge);
                TimeUnit.SECONDS.sleep(1);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    测试结果

    age: 22
    age: 22
    age: 22
    2022-10-26 15:04:25.069  INFO 32957 --- [-127.0.0.1:8848] o.s.boot.SpringApplication               : Started application in 0.144 seconds (JVM running for 71.752)
    2022-10-26 15:04:25.070  INFO 32957 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@10c89124: startup date [Fri Nov 02 15:04:25 CST 2022]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@6520af7
    2022-10-26 15:04:25.071  INFO 32957 --- [-127.0.0.1:8848] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@6520af7: startup date [Fri Nov 02 15:04:24 CST 2022]; root of context hierarchy
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    可支持profile粒度的配置

    spring-cloud-starter-alibaba-nacos-config 在加载配置的时候,不仅仅加载了以 dataid 为 s p r i n g . a p p l i c a t i o n . n a m e . {spring.application.name}. spring.application.name.{file-extension:properties} 为前缀的基础配置,还加载了dataid为 s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{profile}.${file-extension:properties} 的基础配置。在日常开发中如果遇到多套环境下的不同配置,可以通过Spring 提供的 ${spring.profiles.active} 这个配置项来配置。

    spring.profiles.active: develop

    新建一个develop环境的配置

    默认配置
    在这里插入图片描述
    profile配置
    在这里插入图片描述

    application.yaml

    #在配置中心: 可以通过profile 进行设置
    #只有默认的配置文件才能结合profile进行使用
    #对应的DataID命名格式: s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{profile}.${file-extension:properties}

    server:
      port: 8088
    spring:
      application:
        name: nacos.config-develop.yaml
      profiles:
        active: dev
    #在配置中心:  可以通过profile 进行设置
    #只有默认的配置文件才能结合profile进行使用
    #对应的DataID命名格式:${spring.application.name}-${profile}.${file-extension:properties}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    bootstrap.yaml

    #除了配置中心当中的配置会写在bootstrap.yaml中,其他需要的配置一般都是写在application.yaml中
    spring:
      cloud:
        nacos:
          server-addr: localhost:8848   #如果通过域名访问nacos,则 地址为 域名:8848,如果端口号为80,也必须配置,不能省略
          username: nacos
          password: nacos
          config:
            #声明 dataid 文件扩展名 这里配置的文件扩展名是指Nacos Config 配置管理中的配置格式,默认为Properties 只针对默认的配置文件
            #如果使用Properties格式进行配置可以不用指定格式,如果改为其他格式则需要指定文件格式,否则会报错
           file-extension: yaml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    测试代码

    @SpringBootApplication
    public class ProviderApplication {
    
        public static void main(String[] args) {
            ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
            while(true) {
                String userName = applicationContext.getEnvironment().getProperty("name");
                String userAge = applicationContext.getEnvironment().getProperty("age");
                System.err.println("username :" + userName + "; age: " + userAge);
                TimeUnit.SECONDS.sleep(1);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    测试结果

    user name :测试; age: 22
    2022-10-26 15:34:25.013  INFO 33014 --- [ Thread-11] ConfigServletWebServerApplicationContext : Closing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6f1c29b7: startup date [Fri Nov 26 15:33:57 CST 2022]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@63355449
    
    • 1
    • 2

    #配置文件的优先级 (优先级大的会覆盖优先级小的,当优先级大的不存在配置时会向下获取优先级小的配置)
    #比如 profile => name: 测试 ,
    默认配置=> name: 默认配置 age: 22
    获取到的配置为 name: 测试 , age: 22
    #profile > 默认配置文件

    自定义 namespace 的配置(命名空间默认为public)

    环境隔离优先使用自定义命名空间来进行隔离,因为nacos权限控制只能对命名空间进行控制.不建议使用profile的方式处理环境隔离
    在这里插入图片描述

    用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
    在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:

    spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7

    支持自定义 Group 的配置

    group是对命名空间更细粒度的分归类 在没有明确指定 ${spring.cloud.nacos.config.group} 配置的情况下, 默认使用的是 DEFAULT_GROUP 。如果需要自定义自己的 Group,可以通过以下配置来实现:

    spring.cloud.nacos.config.group=DEVELOP_GROUP

    自定义扩展的 Data Id 配置

    Spring Cloud Alibaba Nacos Config 从 0.2.1 版本后,可支持自定义 Data Id 的配置。
    spring.cloud.nacos.config.extension-configs[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。
    优先级
    #profile > 默认配置文件(dataID 与application.name相同的 ) > extension-configs(下标越大优先级越大) > shared-configs(下标越大优先级越大)

    有两种配置方式:
    第一种:shared-configs (shared-configs是一个集合,yaml读取集合的方式有两种,一直是 - 来获取,一种是通过下标获取)

     spring.cloud.nacos.config.shared-configs:
                                     - data-id:
                                       group:
                                       refresh: 
                                     - data-id:
                                       group:
                                       refresh:         
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    下标的方式获取

     #配置支持共享的 Data Id
    spring.cloud.nacos.config.shared-configs[0]:
                                     data-id: common.yaml
    #配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
                                     group: GROUP_APP
    #配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
                                     refresh: true
    spring.cloud.nacos.config.shared-configs[1]: 
                                     data-id: common1.yaml  
                                     group: GROUP_APP1  
                                     refresh: true                               
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    第二种:extension-configs (extension-configs也是一个集合)

     spring.cloud.nacos.config.extension-configs:
                                     - data-id:
                                       group:
                                       refresh: 
                                     - data-id:
                                       group:
                                       refresh:         
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    下标的方式获取

     #配置支持共享的 Data Id
    spring.cloud.nacos.config.extension-configs[0]:
                                     data-id: common.yaml
    #配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
                                     group: GROUP_APP
    #配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
                                     refresh: true
    spring.cloud.nacos.config.extension-configs[1]: 
                                     data-id: common1.yaml  
                                     group: GROUP_APP1  
                                     refresh: true
    # config external configuration
    # 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新
    spring.cloud.nacos.config.extension-configs[0]:
                                        data-id: config-common01.properties
    
    # 2、Data Id 不在默认的组,不支持动态刷新
    spring.cloud.nacos.config.extension-configs[1]:
                                        data-id: config-common02.properties
                                        group: GLOBALE_GROUP
    
    # 3、Data Id 既不在默认的组,也支持动态刷新
    spring.cloud.nacos.config.extension-configs[2]:
                                        data-id: config-common03.properties
                                        group: REFRESH_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
    • 23
    • 24
    • 25
    • 26

    在代码中通过@value 来获取nacos config中的配置参数时,如果配置进行了更新,@value是无法感知到的,需要在对应的类上加上@RefreshScope注解

    @RefreshScope

  • 相关阅读:
    中国电子学会2023年09月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)
    Shell和Terminal的区别于联系
    一道题学习node.js中的CRLF注入
    【任务调度】Apache DolphinScheduler快速入门
    Go runtime剖析系列(一):内存管理
    改版后的PMP到底有多可怕,考试内容详细解读放这里了,看不看依你!
    行业追踪,2023-10-17
    智能合约语言(eDSL)—— wasmtime实现合约引擎补充
    基于python3协程的log传输工具
    实训三:多表查询 - 大学数据库创建与查询实战
  • 原文地址:https://blog.csdn.net/weixin_44137464/article/details/127497520