一、Nacos配置客户端搭建

  1、在父项目(test-springcloud)中,新建配置客户端模块(springcloud-config-nacos-client8901)

  2、在pom中,依赖Nacos配置依赖

<?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">
    <parent>
        <artifactId>cloud-alibaba-parent</artifactId>
        <groupId>com.sdkj</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-config-nacos-client8901</artifactId>

    <dependencies>

        <!--nacos config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

    </dependencies>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>

 

  3、在启动引导配置文件bootstrap.yml中,添加如下配置:

复制代码
 1 spring:
 2   application:
 3     name: nacos-config-client
 4   cloud:
 5     nacos:
 6       discovery:
 7         server-addr: localhost:8848
 8       config:
 9         server-addr: localhost:8848
10         # 配置内容文件的数据格式,默认值:properties
11         file-extension: yaml
复制代码

  4、在配置文件application.yml中,添加如下配置:

复制代码
1 # 端口
2 server:
3   port: 8901
4 
5 spring:
6   profiles:
7     # 表示开发环境
8     active: dev
复制代码

  5、编写启动类

复制代码
1 @EnableDiscoveryClient
2 @SpringBootApplication
3 public class NacosConfigClientMain8901 {
4     public static void main(String[] args) {
5         SpringApplication.run(NacosConfigClientMain8901.class, args);
6     }
7 }
复制代码

  6、编写一个controller,如下:

复制代码
 1 @RestController
 2 // 原生注解,支持Nacos动态刷新功能
 3 @RefreshScope
 4 public class ConfigClientController {
 5 
 6     @Value("${config.info}")
 7     private String configInfo;
 8 
 9     @GetMapping("/config/info")
10     public String getConfigInfo(){
11         return configInfo;
12     }
13 }
复制代码

  到此客户端搭建完整

二、Nacos中添加配置文件

  1、在Nacos的Web界面中——〉配置列表——〉“+”号,添加配置,如下:

    

  2、点击发布按钮,即完成配置文件添加

  3、测试

    1)启动Nacos服务、Nacos配置客户端项目

    2)访问地址:http://localhost:8901/config/info,正常访问

      

    3)在Nacos的Web界面中,修改配置文件内容,将version改为 2

      访问地址:http://localhost:8901/config/info,version动态修改成2了

    4)查看控制台输出内容

      

      由于代码中增加了@RefreshScope,刷新原生注解,此注解也支持Nacos动态刷新配置功能,所以当配置文件修改或,能动态刷新配置

三、Nacos配置文件

  DataId

     在nacos中,新增配置时,需要增加dataId,在 Nacos Spring Cloud 中,dataId 的完整格式如下: 

1 ${prefix}-${spring.profile.active}.${file-extension}

  1)prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

  2)spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

  3)file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

   Nacos加载配置(Namespace + GroupId + DataId)

  nacos客户端,在加载nacos服务上的配置时,先去找nacos服务上查找对应的Namespace(命名空间)-〉查找对应的Group(组)-〉查询对应的DataId(配置集 ID)

  Namespace(命名空间):用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等,保留空间为public。

  Group(组):Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

  DataId(配置集 ID):Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

  Namespace、Group和DataId的关系如下:

  

  DataId(配置集 ID)示例

  1、在Nacos中分别新增2个配置文件,如下:

    

    nacos-config-client-test.yaml,内容:

1 config:
2   info: nacos config center, nacos-config-client-test.yaml, version = 1

 

  2、修改配置客户端模块内容,application.yml配置,如下:

1 spring:
2   profiles:
3     # 表示开发环境
4     active: test

  3、重新启动项目,访问地址:http://localhost:8901/config/info,获取到的是nacos-config-client-test.yaml文件的内容

  Group(组)示例

  1、在Nacos的Web界面中——〉配置列表——〉“+”号,添加配置,在新的组(BJ_GROUP)中,如下:

    

    配置列表

    

  2、修改配置客户端模块内容,

    application.yml,配置如下:

复制代码
1 # 端口
2 server:
3   port: 8901
4 
5 spring:
6   profiles:
7     # 表示开发环境
8     active: dev
复制代码

    bootstrap.yml,增加group,配置如下:

复制代码
 1 spring:
 2   application:
 3     name: nacos-config-client
 4   cloud:
 5     nacos:
 6       discovery:
 7         server-addr: localhost:8848
 8       config:
 9         server-addr: localhost:8848
10         # 配置内容文件的数据格式,默认值:properties
11         file-extension: yaml
12         group: BJ_GROUP
复制代码

   3、重新启动项目,访问地址:http://localhost:8901/config/info,获取到的是BJ_GROUP分组中,nacos-config-client-dev.yaml文件的内容

    

  Namespace(命名空间)示例

  1、在Nacos的Web界面中——〉命名空间菜单——〉新建命名空间,如下:

    

    命名空间列表

    

  1、在Nacos的Web界面中——〉配置列表——〉选择“DEV”命名空间——〉“+”号,添加配置,如下:

    

    新增内容:

     

  2、修改配置客户端模块内容

    application.yml配置:

复制代码
1 # 端口
2 server:
3   port: 8901
4 
5 spring:
6   profiles:
7     # 表示开发环境
8     active: dev
复制代码

    bootstrap.yml配置

复制代码
 1 spring:
 2   application:
 3     name: nacos-config-client
 4   cloud:
 5     nacos:
 6       discovery:
 7         server-addr: localhost:8848
 8       config:
 9         server-addr: localhost:8848
10         # 配置内容文件的数据格式,默认值:properties
11         file-extension: yaml
12         group: SZ_GROUP
13         # 命名空间ID
14         namespace: c17382d8-9c38-4b21-b4e8-7f8a802788e2
复制代码

  3、重新启动项目,访问地址:http://localhost:8901/config/info,获取到的是DEV命名空间-〉BJ_GROUP分组-〉nacos-config-client-dev.yaml文件的内容