六、springcloud之配置中心Config
一、配置中心提供的核心功能
Spring Cloud Config為服務(wù)端和客戶端提供了分布式系統(tǒng)的外部化配置支持。配置服務(wù)器為各應(yīng)用的所有環(huán)境提供了一個(gè)中心化的外部配置。它實(shí)現(xiàn)了對(duì)服務(wù)端和客戶端對(duì)Spring Environment和PropertySource抽象的映射
Spring Cloud Config項(xiàng)目是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了Client和Server兩個(gè)部分,server提供配置文件的存儲(chǔ)、以接口的形式將配置文件的內(nèi)容提供出去,client通過(guò)接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用。
Spring cloud使用git或svn存放配置文件,當(dāng)然他也提供本地化文件系統(tǒng)的存儲(chǔ)方式,默認(rèn)情況下使用git。
二、構(gòu)建Config Server
分為三步:
1.pom.xml中引入spring-cloud-config-server依賴:
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency> </dependencies>2.啟動(dòng)類添加@EnableConfigServer注解,激活對(duì)配置中心的支持
@EnableConfigServer @SpringBootApplication public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);} }3.配置文件
Git配置:(開發(fā),測(cè)試,生產(chǎn)三份文件)
server:port: 8001 spring:application:name: spring-cloud-config-servercloud:config:server:git:uri: https或ssh # 配置git倉(cāng)庫(kù)的地址search-paths: # git倉(cāng)庫(kù)地址下的相對(duì)地址,可以配置多個(gè),用,分割。username: # git倉(cāng)庫(kù)的賬號(hào)password: # git倉(cāng)庫(kù)的密碼svn配置: (和git版本稍有區(qū)別,需要顯示聲明subversion.)
server:port: 8001spring:cloud:config:server:svn:uri: username:password:default-label: trunk profiles:active: subversionapplication:name: spring-cloud-config-server? 本地存儲(chǔ)配置的方式:(只需設(shè)置屬性)
spring.profiles.active=native,
Config Server會(huì)默認(rèn)從應(yīng)用的src/main/resource目錄下檢索配置文件。也可以通過(guò)spring.cloud.config.server.native.searchLocations=file:F:/properties/屬性來(lái)指定配置文件的位置。
雖然Spring Cloud Config提供了這樣的功能,但是為了支持更好的管理內(nèi)容和版本控制的功能,還是推薦使用git的方式。
?
4.測(cè)試:
github創(chuàng)建了一個(gè)springcloudconfigtest目錄作為配置倉(cāng)庫(kù),并根據(jù)不同環(huán)境新建了下面四個(gè)配置文件:
- config-test-dev.properties
- config-test-test.properties
- config-test-prod.properties
為每個(gè)配置文件分別設(shè)置了testproperties屬性賦予不同的值
如:?hello im dev/test/pro?
測(cè)試server端是否可以讀取到github上面的配置信息,直接訪問(wèn):http://localhost:8001/config-test/dev
{"name": "config-test","profiles": ["dev"],"label": null,"version": "","state": null,"propertySources": [{"name": "{git/svn/本地配置地址}dev.yml","source": {"debug": true,"server.port": 8001,"testproperties": "hello im dev" ...//數(shù)據(jù)源,redis等配置}}] }上述的返回的信息包含了配置文件的位置、版本、配置文件的名稱以及配置文件中的具體內(nèi)容,說(shuō)明server端已經(jīng)成功獲取了git倉(cāng)庫(kù)的配置信息。
直接查看配置文件中的配置信息可訪問(wèn):http://localhost:8001/config-test-dev.properties,返回:testproperties: hello im dev
倉(cāng)庫(kù)中的配置文件會(huì)被轉(zhuǎn)換成web接口,訪問(wèn)可以參照以下的規(guī)則:
-
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
上面的url會(huì)映射{application}-{profile}.properties對(duì)應(yīng)的配置文件,{label}對(duì)應(yīng)git上不同的分支,默認(rèn)為master。
如config-test-dev.properties,它的application是config-test,profile是dev。client會(huì)根據(jù)填寫的參數(shù)來(lái)選擇讀取對(duì)應(yīng)的配置。
修改配置文件中的配置,并提交,server會(huì)自動(dòng)更新提交的配置
三、微服務(wù)客戶端(獲取server的配置)
1.添加依賴:spring-cloud-starter-config
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency> </dependencies>引入spring-boot-starter-web包方便web測(cè)試
2.創(chuàng)建啟動(dòng)類
啟動(dòng)類只需要@SpringBootApplication注解就可以
@SpringBootApplication public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);} }3.配置文件
需要配置兩個(gè)配置文件,application.yml和bootstrap.yml
application.yml如下:
spring:application:name: spring-cloud-config-client server:port: 8002bootstrap.properties如下:
spring:cloud:config:name: "config-test"lab: masteruri: http://localhost:8001/profile: dev
說(shuō)明:
- spring.cloud.config.name:對(duì)應(yīng){application}部分
- spring.cloud.config.profile:對(duì)應(yīng){profile}部分
- spring.cloud.config.label:對(duì)應(yīng)git的分支。如果配置中心使用的是本地存儲(chǔ),則該參數(shù)無(wú)用
- spring.cloud.config.uri:配置中心的具體地址
- spring.cloud.config.discovery.service-id:指定配置中心的service-id,便于擴(kuò)展為高可用配置集群。
特別注意:上面這些與spring-cloud相關(guān)的屬性必須配置在bootstrap.properties中,config部分內(nèi)容才能被正確加載。因?yàn)閏onfig的相關(guān)配置會(huì)先于application.properties,而bootstrap.properties的加載也是先于application.properties。
測(cè)試:
使用@Value注解來(lái)獲取server端參數(shù)的值
@Value("${server端的參數(shù)}")private String hello;遇到的問(wèn)題:此時(shí)在修改server端的配置文件的參數(shù)值,server可以讀取到修改后的配置,但是client端讀取的值還是舊的
解決方案:/refresh
Spring Cloud Config分服務(wù)端和客戶端,服務(wù)端負(fù)責(zé)將git(svn)中存儲(chǔ)的配置文件發(fā)布成REST接口,客戶端可以從服務(wù)端REST接口獲取配置。但客戶端并不能主動(dòng)感知到配置的變化,從而主動(dòng)去獲取新的配置。客戶端如何去主動(dòng)獲取新的配置信息呢,springcloud已經(jīng)給我們提供了解決方案,每個(gè)客戶端通過(guò)POST方法觸發(fā)各自的/refresh。
1.添加依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency>增加了spring-boot-starter-actuator包,spring-boot-starter-actuator是一套監(jiān)控的功能,可以監(jiān)控程序在運(yùn)行時(shí)狀態(tài),其中就包括/refresh的功能。
2.開啟更新機(jī)制
需要給加載變量的類上面加載@RefreshScope,在客戶端執(zhí)行/refresh的時(shí)候就會(huì)更新此類下面的變量值。
?
@RestController @RefreshScope // 使用該注解的類,會(huì)在接到SpringCloud配置中心配置刷新的時(shí)候,自動(dòng)將新的配置更新到該類對(duì)應(yīng)的字段中。3.springboot 1.5.X 以上默認(rèn)開通了安全認(rèn)證,所以需要在配置文件application.properties添加以下配置
management.security.enabled=falsetip:可以使用cmd,進(jìn)行post訪問(wèn)
curl -X POST http://localhost:8002/refresh
每次手動(dòng)刷新客戶端也很麻煩,有沒(méi)有什么辦法只要提交代碼就自動(dòng)調(diào)用客戶端來(lái)更新呢,github的webhook是一個(gè)好的辦法。
webhook
參見:http://www.ityouknow.com/springcloud/2017/05/23/springcloud-config-svn-refresh.html
參考:http://www.ityouknow.com/springcloud/2017/05/22/springcloud-config-git.html
http://blog.didispace.com/springcloud4/
?
轉(zhuǎn)載于:https://www.cnblogs.com/soul-wonder/p/9214944.html
總結(jié)
以上是生活随笔為你收集整理的六、springcloud之配置中心Config的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 类中的构造方法实例化的时候自动执行
- 下一篇: 原 layer父子页面交互