一、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文件的內容