天天看點

Spring Cloud Config ------Nacos

一、配置中心介紹

1、Spring Cloud Config

Spring Cloud Config 為分布式系統的外部配置提供了服務端和用戶端的支援方案。在配置的服務端您可以在所有環境中為應用程式管理外部屬性的中心位置。用戶端和服務端概念上的Spring Environment 和 PropertySource 抽象保持同步, 它們非常适合Spring應用程式,但是可以與任何語言中運作的應用程式一起使用。當應用程式在部署管道中從一個開發到測試直至進入生産時,您可以管理這些環境之間的配置,并確定應用程式在遷移時具有它們需要運作的所有内容。伺服器存儲後端的預設實作使用git,是以它很容易支援标記版本的配置環境,并且能夠被管理内容的各種工具通路。很容易添加替代的實作,并用Spring配置将它們插入。

Spring Cloud Config 包含了Client和Server兩個部分,server提供配置檔案的存儲、以接口的形式将配置檔案的内容提供出去,client通過接口擷取資料、并依據此資料初始化自己的應用。Spring cloud使用git或svn存放配置檔案,預設情況下使用git。

2、Nacos替換Config

Nacos 可以與 Spring, Spring Boot, Spring Cloud 內建,并能代替 Spring Cloud Eureka, Spring Cloud Config。通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 實作配置的動态變更。

(1)應用場景

在系統開發過程中,開發者通常會将一些需要變更的參數、變量等從代碼中分離出來獨立管理,以獨立的配置檔案的形式存在。目的是讓靜态的系統工件或者傳遞物(如 WAR,JAR 包等)更好地和實際的實體運作環境進行适配。配置管理一般包含在系統部署的過程中,由系統管理者或者運維人員完成。配置變更是調整系統運作時的行為的有效手段。

如果微服務架構中沒有使用統一配置中心時,所存在的問題:

- 配置檔案分散在各個項目裡,不友善維護

- 配置内容安全與權限

- 更新配置後,項目需要重新開機

nacos配置中心:系統配置的集中管理(編輯、存儲、分發)、動态更新不重新開機、復原配置(變更管理、曆史版本管理、變更審計)等所有與配置相關的活動。

二、讀取Nacos配置中心的配置檔案

1、在Nacos建立統一配置檔案

(1)點選建立按鈕

Spring Cloud Config ------Nacos
Spring Cloud Config ------Nacos

a)Data ID 的完整規則格式如下

${prefix}-${spring.profiles.active}.${file-extension}

- prefix 預設為所屬工程配置spring.application.name 的值(即:nacos-provider),也可以通過配置項 spring.cloud.nacos.config.prefix來配置。

- spring.profiles.active=dev 即為目前環境對應的 profile。 注意:當 spring.profiles.active 為空時,對應的連接配接符 - 也将不存在,dataId 的拼接格式變成 ${prefix}.${file-extension}

- file-exetension 為配置内容的資料格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前隻支援 properties 和 yaml 類型。

2、以service-statistics子產品為例

(1)在service中引入依賴

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

(2)建立bootstrap.properties配置檔案

#配置中心位址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#spring.profiles.active=dev
# 該配置影響統一配置中心中的dataId
spring.application.name=service-statistics      

(3)把項目之前的application.properties内容注釋,啟動項目檢視效果

3、補充:springboot配置檔案加載順序

其實yml和properties檔案是一樣的原理,且一個項目上要麼yml或者properties,二選一的存在。推薦使用yml,更簡潔。

bootstrap與application

(1)加載順序

這裡主要是說明application和bootstrap的加載順序。

bootstrap.yml(bootstrap.properties)先加載

application.yml(application.properties)後加載

bootstrap.yml 用于應用程式上下文的引導階段。

bootstrap.yml 由父Spring ApplicationContext加載。

父ApplicationContext 被加載到使用 application.yml 的之前。

(2)配置差別

bootstrap.yml 和application.yml 都可以用來配置參數。

bootstrap.yml 可以了解成系統級别的一些參數配置,這些參數一般是不會變動的。

application.yml 可以用來定義應用級别的。

三、名稱空間切換環境

在實際開發中,通常有多套不同的環境(預設隻有public),那麼這個時候可以根據指定的環境來建立不同的 namespce,例如,開發、測試和生産三個不同的環境,那麼使用一套 nacos 叢集可以分别建以下三個不同的 namespace。以此來實作多環境的隔離。

1、建立命名空間

Spring Cloud Config ------Nacos

 預設隻有public,建立了dev、test和prod命名空間

Spring Cloud Config ------Nacos
Spring Cloud Config ------Nacos

2、克隆配置

(1)切換到配置清單:

Spring Cloud Config ------Nacos

可以發現有四個名稱空間:public(預設)以及我們自己添加的3個名稱空間(prod、dev、test),可以點選檢視每個名稱空間下的配置檔案,當然現在隻有public下有一個配置。

預設情況下,項目會到public下找 服務名.properties檔案。

接下來,在dev名稱空間中也添加一個nacos-provider.properties配置。這時有兩種方式:

第一,切換到dev名稱空間,添加一個新的配置檔案。缺點:每個環境都要重複配置類似的項目

第二,直接通過clone方式添加配置,并修改即可。推薦

Spring Cloud Config ------Nacos

點選編輯:修改配置内容,端口号改為8013以作區分

Spring Cloud Config ------Nacos

在項目子產品中,修改bootstrap.properties添加如下配置

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.profiles.active=dev

# 該配置影響統一配置中心中的dataId,之前已經配置過
spring.application.name=service-statistics
spring.cloud.nacos.config.namespace=13b5c197-de5b-47e7-9903-ec0538c9db01      

namespace的值為:

Spring Cloud Config ------Nacos

 重新開機服務提供方服務,測試修改之後是否生效

四、多配置檔案加載

在一些情況下需要加載多個配置檔案。假如現在dev名稱空間下有三個配置檔案:service-statistics.properties、redis.properties、jdbc.properties

Spring Cloud Config ------Nacos

添加配置,加載多個配置檔案

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.profiles.active=dev
# 該配置影響統一配置中心中的dataId,之前已經配置過
spring.application.name=service-statistics
spring.cloud.nacos.config.namespace=13b5c197-de5b-47e7-9903-ec0538c9db01
spring.cloud.nacos.config.ext-config[0].data-id=redis.properties
# 開啟動态重新整理配置,否則配置檔案修改,工程無法感覺
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=jdbc.properties
spring.cloud.nacos.config.ext-config[1].refresh=true      

五、總結

一丶

Spring Cloud Config ------Nacos

二丶

Spring Cloud Config ------Nacos