likes
comments
collection
share

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

作者站长头像
站长
· 阅读数 16

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的配置管理页面创建如下图所示的配置

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

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

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

🐍第三步,读取配置文件

@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);
    }
}

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

启动,就可以读取到了

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

🐦高阶用法

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

🐦第一步,nacos创建nacos-config.yml文件,配置如下【Spring Cloud Alibaba】Nacos config的使用和高阶用法

🐦第二步,修改项目配置文件如下

【Spring Cloud Alibaba】Nacos config的使用和高阶用法 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

file-extension:文件名的后缀

🐦第三步,读取

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

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;
    }
}

【Spring Cloud Alibaba】Nacos config的使用和高阶用法 postman测试

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

修改nacos配置

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

启动类修改为

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);
        }
    }
}

修改之后成功获取

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

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

🐑第一步:替换jar包

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>

替换为

 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

🐑第三步,项目配置文件配置

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}

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);
        }
    }
}

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

nacos默认读取的是public

【Spring Cloud Alibaba】Nacos config的使用和高阶用法 我们要用到test环境

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法 【Spring Cloud Alibaba】Nacos config的使用和高阶用法

🐫第三步,项目配置命名空间

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

namespace: 命名空间id

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

🐎第一步,nacos隔离环境

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

  <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>

配置好了要刷新maven

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

🐎第三步,修改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@

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

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

 <dependency>
            <groupId>org.yaml</groupId>
            <artifactId>snakeyaml</artifactId>
        </dependency>
  <build>
        <!--build节点增加内容-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <!--开启过滤,用指定的参数替换directory下的文件中的参数-->
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

配置好了之后就可以启动

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

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

总的来说,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为分布式系统中的外部化配置提供了可靠的解决方案,同时也提供了很多的高级用法,用户可以根据需要自由使用。