1. 程式人生 > 實用技巧 >Spring Cloud Alibaba:Nacos配置中心

Spring Cloud Alibaba:Nacos配置中心

搭建環境

pom依賴

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

bootstrap.yml

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.10.137:8848
      config:
        server-addr: 192.168.10.137:8848
        file-extension: yaml

application.yml

spring:
  profiles:
    active: dev

主啟動類和controller

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigMain3377.class,args);
    }
}
@RestController
@RefreshScope//支援nacos動態重新整理功能
public class ConfigClientController {
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo(){
        return configInfo;
    }
}

配置dataid公式:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
在nacos中新建一個配置

啟動,呼叫controller,發現可以獲取配置,並且當配置中心的配置修改後,支援動態重新整理配置功能。

namespace-group-dataid

支援自定義 namespace 的配置
首先看一下 Nacos 的 Namespace 的概念, Nacos 概念

用於進行租戶粒度的配置隔離。不同的名稱空間下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等。
在沒有明確指定 ${spring.cloud.nacos.config.namespace} 配置的情況下, 預設使用的是 Nacos 上 Public 這個namespae。如果需要使用自定義的名稱空間,可以通過以下配置來實現:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7
該配置必須放在 bootstrap.properties 檔案中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 對應的 id,id 值可以在 Nacos 的控制檯獲取。並且在新增配置時注意不要選擇其他的 namespae,否則將會導致讀取不到正確的配置。
支援自定義 Group 的配置
在沒有明確指定 ${spring.cloud.nacos.config.group} 配置的情況下, 預設使用的是 DEFAULT_GROUP 。如果需要自定義自己的 Group,可以通過以下配置來實現:
spring.cloud.nacos.config.group=DEVELOP_GROUP
該配置必須放在 bootstrap.properties 檔案中。並且在新增配置時 Group 的值一定要和 spring.cloud.nacos.config.group 的配置值一致。
支援自定義擴充套件的 Data Id 配置
Spring Cloud Alibaba Nacos Config 從 0.2.1 版本後,可支援自定義 Data Id 的配置。關於這部分詳細的設計可參考 這裡。 一個完整的配置案例如下所示:
spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

config external configuration

1、Data Id 在預設的組 DEFAULT_GROUP,不支援配置的動態重新整理

spring.cloud.nacos.config.extension-configs[0].data-id=ext-config-common01.properties

2、Data Id 不在預設的組,不支援動態重新整理

spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP

3、Data Id 既不在預設的組,也支援動態重新整理

spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true
可以看到:
通過 spring.cloud.nacos.config.extension-configs[n].data-id 的配置方式來支援多個 Data Id 的配置。
通過 spring.cloud.nacos.config.extension-configs[n].group 的配置方式自定義 Data Id 所在的組,不明確配置的話,預設是 DEFAULT_GROUP。
通過 spring.cloud.nacos.config.extension-configs[n].refresh 的配置方式來控制該 Data Id 在配置變更時,是否支援應用中可動態重新整理, 感知到最新的配置值。預設是不支援的。
多個 Data Id 同時配置時,他的優先順序關係是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,優先順序越高。
spring.cloud.nacos.config.extension-configs[n].data-id 的值必須帶副檔名,副檔名既可支援 properties,又可以支援 yaml/yml。 此時 spring.cloud.nacos.config.file-extension 的配置對自定義擴充套件配置的 Data Id 副檔名沒有影響。
通過自定義擴充套件的 Data Id 配置,既可以解決多個應用間配置共享的問題,又可以支援一個應用有多個配置檔案。
為了更加清晰的在多個應用間配置共享的 Data Id ,你可以通過以下的方式來配置:
配置支援共享的 Data Id
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml
配置 Data Id 所在分組,預設預設 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1
配置Data Id 在配置變更時,是否動態重新整理,預設預設 false
spring.cloud.nacos.config.shared-configs[0].refresh=true
可以看到:
通過 spring.cloud.nacos.config.shared-configs[n].data-id 來支援多個共享 Data Id 的配置。
通過 spring.cloud.nacos.config.shared-configs[n].group 來配置自定義 Data Id 所在的組,不明確配置的話,預設是 DEFAULT_GROUP。
通過 spring.cloud.nacos.config.shared-configs[n].refresh 來控制該Data Id在配置變更時,是否支援應用中動態重新整理,預設false。