• 【Spring Cloud Alibaba】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 环境中。当应用程序从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。
    引用:
    https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config

    文中对应的代码可查看
    https://gitee.com/WangFuGui-Ma/spring-cloud-alibaba/tree/master/nacos/config

    🐍第一步,创建配置文件到nacos中

    在nacos的配置管理页面创建如下图所示的配置

    在这里插入图片描述

    🐍第二步,在项目中配置nacos的地址和指定文件

    必须使用 bootstrap.properties 配置文件来配置Nacos Server 地址

    spring.application.name 和 nacos中的dataid相对应

    在这里插入图片描述

    spring.cloud.nacos.config.server-addr填写自己本机的nacos地址

    在这里插入图片描述

    🐍第三步,读取配置文件

    @SpringBootApplication
    public class NacosConfigApplication {
    
        public static void main(String[] args) {
            ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
            String useLocalCache = applicationContext.getEnvironment().getProperty("useLocalCache");
            System.err.println("useLocalCache :"+useLocalCache);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在我们的springboot启动内中读取我们的配置文件

    在这里插入图片描述

    启动,就可以读取到了

    在这里插入图片描述

    🐦高阶用法

    🐦高阶用法一:使用yaml文件

    🐦第一步,nacos创建nacos-config.yml文件,配置如下在这里插入图片描述
    🐦第二步,修改项目配置文件如下

    在这里插入图片描述
    bootstrap.yml

    spring:
      application:
        name: nacos-config # appName 会自动读取nacos中dataid为nacos-config.yml的文件
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848
            file-extension: yml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    file-extension:文件名的后缀

    🐦第三步,读取

    在这里插入图片描述

    🐼高阶用法二:使用业务类读取配置

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/config")
    @RefreshScope
    public class ConfigController {
    
        @Value("${useLocalCache:false}")
        private boolean useLocalCache;
    
        /**
         * http://localhost:8080/config/get
         */
        @RequestMapping("/get")
        public boolean get() {
            return useLocalCache;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述
    postman测试

    在这里插入图片描述

    🐘高阶用法三:动态刷新配置

    修改nacos配置

    在这里插入图片描述

    启动类修改为

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ConfigurableApplicationContext;
    
    import java.util.concurrent.TimeUnit;
    
    /**
     * Document: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
     */
    @SpringBootApplication
    public class NacosConfigApplication {
    
        public static void main(String[] args) throws InterruptedException {
    
            ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
            while(true) {
                String useLocalCache = applicationContext.getEnvironment().getProperty("useLocalCache");
                System.err.println("useLocalCache :" + useLocalCache);
                TimeUnit.SECONDS.sleep(1);
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    修改之后成功获取

    在这里插入图片描述

    业务类上面可以加注解@RefreshScope开启刷新配置

    在这里插入图片描述

    在这里插入图片描述

    🐑高阶用法四:使用相同的配置文件

    使用情况:很多系统共用一个配置文件

    🐑第一步:替换jar包
     <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>0.2.1.RELEASE</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    替换为

     <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>2.2.3.RELEASE</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    🐑第二步:nacos创建common.yml文件

    在这里插入图片描述

    🐑第三步,项目配置文件配置
    spring:
      application:
        name: nacos-config # appName 会自动读取nacos中dataid为nacos-config.yml的文件
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848
            file-extension: yml #文件后缀名
            shared-configs:
              - common.${spring.cloud.nacos.config.file-extension}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    shared-configs:共用的文件

    🐑第四步,启动类读取配置
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ConfigurableApplicationContext;
    
    import java.util.concurrent.TimeUnit;
    
    /**
     * Document: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
     */
    @SpringBootApplication
    public class NacosConfigApplication {
    
        public static void main(String[] args) throws InterruptedException {
    
            ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
            while(true) {
                String useLocalCache = applicationContext.getEnvironment().getProperty("useLocalCache");
                String common = applicationContext.getEnvironment().getProperty("common");
                System.err.println("useLocalCache :" + useLocalCache);
                System.err.println("common :" + common);
                TimeUnit.SECONDS.sleep(1);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述

    🐫高阶用法五: 自定义命名空间(namespace)

    nacos默认读取的是public

    在这里插入图片描述
    我们要用到test环境

    🐫第一步,创建test命名空间

    在这里插入图片描述

    复制命名空间id 4c9c23a2-0300-4c72-b07f-7846bd03e153

    在这里插入图片描述

    🐫第二步,命名空间里面新建配置文件

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

    🐫第三步,项目配置命名空间
    spring:
      application:
        name: nacos-config # appName 会自动读取nacos中dataid为nacos-config.yml的文件
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848
            file-extension: yml #文件后缀名
            shared-configs:
              - common.${spring.cloud.nacos.config.file-extension}
            namespace: 4c9c23a2-0300-4c72-b07f-7846bd03e153
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    namespace: 命名空间id

    这样读到的就是test空间下的配置了

    在这里插入图片描述

    🐎高阶用法六:灵活配置环境

    🐎第一步,nacos隔离环境

    在这里插入图片描述

    🐎第二步,pom文件配置环境

    在这里插入图片描述

      <profiles>
            <profile>
                <id>dev</id>
                <properties>
                    <profileActive>dev</profileActive>
                    <serverAddr>127.0.0.1:8848</serverAddr>
                    <namespace>563742f8-6f8b-4b97-8a1f-2f6cf6beb5fa</namespace>
                </properties>
                <activation>
                    <!-- 默认环境 -->
                    <activeByDefault>true</activeByDefault>
                </activation>
            </profile>
            <profile>
                <id>test</id>
                <properties>
                    <profileActive>test</profileActive>
                    <serverAddr>127.0.0.1:8848</serverAddr>
                    <namespace>4c9c23a2-0300-4c72-b07f-7846bd03e153</namespace>
                </properties>
            </profile>
        </profiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    配置好了要刷新maven

    好了之后会有两个配置文件选项

    在这里插入图片描述

    🐎第三步,修改yml文件
    spring:
      profiles:
        active: @profileActive@
      application:
        name: nacos-config # appName 会自动读取nacos中dataid为nacos-config.yml的文件
      cloud:
        nacos:
          config:
            server-addr: @serverAddr@
            file-extension: yml #文件后缀名
            shared-configs:
              - common.${spring.cloud.nacos.config.file-extension}
            namespace: @namespace@
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    但是这个时候启动不了的,因为原生的yml不支持@符号

    🐎第四步,修改pom文件使其支持@符号

    在这里插入图片描述

     <dependency>
                <groupId>org.yamlgroupId>
                <artifactId>snakeyamlartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
      <build>
            
            <resources>
                <resource>
                    <directory>src/main/resourcesdirectory>
                    
                    <filtering>truefiltering>
                resource>
            resources>
        build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    配置好了之后就可以启动

    切换环境在maven右侧切换即可

    在这里插入图片描述

    总的来说,Spring Cloud Alibaba Nacos Config是一种用于管理分布式系统配置的工具,它提供了服务器端和客户端的支持,允许用户在Nacos服务器上集中管理Spring Cloud应用程序的外部配置。Spring Cloud Alibaba Nacos Config提供了Config Server和Client的替代方案,客户端和服务器上的概念与Spring Environment和PropertySource有着一致的抽象,在特殊的bootstrap阶段,配置被加载到Spring环境中。在应用程序从开发到测试再到生产的不同环境中,用户可以通过Nacos集中管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。

    使用Spring Cloud Alibaba Nacos Config的主要步骤包括:

    • 在Nacos配置管理页面上创建配置文件。

    • 在项目中配置Nacos地址和指定文件,这必须使用bootstrap.properties配置文件来配置Nacos Server地址。

    • 在应用程序启动时读取配置文件。在SpringBoot启动内中读取配置文件,可以使用SpringApplication类的run()方法,然后在ConfigurableApplicationContext上调用getEnvironment().getProperty()方法读取配置属性。

    在高阶用法方面,可以使用YAML文件和业务类读取配置。使用YAML文件时,需要在Nacos服务器上创建nacos-config.yml文件,并将配置文件后缀设置为yml。然后,可以使用bootstrap.yml配置文件来指定Nacos服务器地址和文件扩展名。在使用业务类读取配置时,需要使用@Value注解将属性注入到控制器中,并使用@RefreshScope注解使该控制器成为可刷新的bean。这使得在应用程序运行时,可以通过HTTP接口刷新该控制器并重新读取配置。

    综上所述,Spring Cloud Alibaba Nacos Config为分布式系统中的外部化配置提供了可靠的解决方案,同时也提供了很多的高级用法,用户可以根据需要自由使用。

    仓库地址
    https://gitee.com/WangFuGui-Ma/spring-cloud-alibaba/tree/master/nacos/config

  • 相关阅读:
    158页完整版(5万字)数字化智慧停车场管理解决方案
    2022蓝队HW初级面试题总结
    架构师-软件工程习题选择题
    哈尔滨理工大学计算机考研资料汇总
    hadoop 安装到配置-2021-11-4
    ElasticSearch7.3学习(二十七)----聚合概念(bucket和metric)及其示例
    商业智能BI开发和报表开发有什么本质区别?
    【Rust 入门学习】2.1 Rust 猜谜游戏
    G1D23-RAGA&报名蓝桥&Attackg&安装cuda&torch
    2023-09-28 monetdb-databae的概念和作用-分析
  • 原文地址:https://blog.csdn.net/csdnerM/article/details/129545422