1. 程式人生 > 實用技巧 >Spring Cloud Config ------Nacos

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)點選建立按鈕

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、建立名稱空間

預設只有public,新建了dev、test和prod名稱空間

2、克隆配置

(1)切換到配置列表:

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

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

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

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

第二,直接通過clone方式新增配置,並修改即可。推薦

點選編輯:修改配置內容,埠號改為8013以作區分

在專案模組中,修改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的值為:

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

四、多配置檔案載入

在一些情況下需要載入多個配置檔案。假如現在dev名稱空間下有三個配置檔案:service-statistics.properties、redis.properties、jdbc.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
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

五、總結

一丶

二丶