本文轉自https://blog.csdn.net/CSDN_Stephen/article/details/78856323
Spring Cloud 配置中心的主流實現方式
Spring cloud config
Spring cloud zookeeper config
以下是這兩者的簡介
Srping Cloud Config
Spring cloud config就是和git(svn)集成來實現配置中心。Spring cloud config分服務端、客戶端和git(svn)三部分,服務端負責將Git(SVN)中存儲的配置文件發布成REST接口,客戶端可以從服務端REST接口獲取配置(但客戶端並不能主動感知到配置的變化,從而主動去獲取新的配置,這需要每個客戶端通過POST方法觸發各自的/refresh)。其中通過git本身的屬性可以達到配置版本控制的目的。有緩存形式,先把config下載到服務端本地再提供給客戶端,提高可靠性。
Srping Cloud Zookeeper Config
該項目通過自動配置並綁定到Spring環境,為Spring Boot應用程序提供Zookeeper集成。Zookeeper提供了一個分層命名空間,允許客戶端存儲任意數據,如配置數據。Spring Cloud Zookeeper Config是Config Server和Client的替代方案。
兩者的比較
Spring Cloud Config 通過文件系統,git/svn倉庫來管理配置文件。包含客戶端、服務端和git/svn倉庫。通過git/svn特性可以達到版本控制
Spring Cloud Zookeeper Config 通過Zookeeper分級命名空間來儲存配置項數據,另外Zookeeper可以實時監聽節點變化和通知機制。
Spring Cloud Zookeeper Config 主要分為兩部分,client端和zookeeper,client端內嵌在spring-cloud-starter-zookeeper-config中,用的是netflix開源的CuratorFramework 來連接zookeeper獲取配置數據。在微服務啟動時候加載到environment中。
如何使用Spring Cloud Zookeeper Config
1、在客戶端(調用方)pom.xml中加入以下依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-config</artifactId>
</dependency>
2、在客戶端配置文件bootstrap.yml / bootstrap.properties中加入zookeeper連接信息
spring:
application:
name: testApp
cloud:
zookeeper:
enabled: true # true:開啟zookeeper外部化配置, false:讀取本地配置;
connect-string: IP1:port1,IP2:port2,IP3:port3
config:
root: /config/dev
enabled: true
watcher:
enabled: false
屬性詳解:
connect-string:ZooKeeper的地址,如果是集群,逗號分隔節點,格式:ip:port[,ip2:port2,.....]
root:指定zookeeper中,屬性的根目錄
spring.application.name: 定義你的項目的名稱,zk會在你指定的根目錄下尋找以這個項目名命名的目錄下的配置
watcher.enabled: 默認值是true, 監控配置變更后是否自動更新,需配合Spring Boot Actuators 使用
3、導入配置文件到Zookeeper
3.1、屬性命名規則(假設你在上面的root配置項設置為/config/dev):
/config/dev/{application-name},{profile}={key}={value}
服務名和dev (profile名)以逗號隔開,可以設置spring.cloud.zookeeper.config.profile-separator 來用其他符號隔開,譬如”-”等
3.2、配置文件例子:
testApp-dev.txt
/config/dev/testApp,dev=server.port=8080
3.3、使用ZKUI來可視化管理Zookeeper,登錄ZKUI->import 選擇對應文件導入即可。
ZKUI安裝使用請自行百度。
4、客戶端獲取配置方式
我了解到有三種,可能還有其他的,大家可以自行百度
4.1、通過@Value注解
@Value("${db.url}")
String dbUrl;
4.2、配置文件(xml)中直接使用(用${propertyName})
<bean id="globalDbConfig" class="com.demo.connector.GlobalDbConfig">
<property name="globalDbUsername" value="${global.username}"/>
<property name="globalDbPassword" value="${global.password}"/>
</bean>
如何讓客戶端自動更新zookeeper變更的配置
1、客戶端pom.xml添加如下依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、在bootstrap.yml/bootstrap.properties 配置文件中打開watcher
spring.cloud.zookeeper.config.watcher.enabled=true
3、Bean上添加@RefreshScope注解
配置讀取簡介
配置信息在服務啟動時加載到Spring Environment中。配置信息默認存放在/config命名空間下。
例如,應用名為“testApp”,環境“dev”,則下列配置源會被創建:
- config/testApp,dev
- config/testApp
- config/application,dev
- config/application
最為具體的配置源放在最上面,最泛化的放在最下面。config/application命名空間下的屬性會被用於所有應用。config/testApp命名空間下的屬性只會被“testApp”服務的實例使用,其他服務不能使用。
配置優先級
遠程配置(zookeeper等) > 命令行參數配置 > application.yml> bootstrap.yml