在本文中,我們將學(xué)習(xí)如何構(gòu)建一個(gè)基于Git存儲(chǔ)的分布式配置中心巴元,并對(duì)客戶(hù)端進(jìn)行改造论矾,并讓其能夠從配置中心獲取配置信息并綁定到代碼中的整個(gè)過(guò)程。
準(zhǔn)備配置倉(cāng)庫(kù)
準(zhǔn)備一個(gè)git倉(cāng)庫(kù)沛简,可以在碼云或Github上創(chuàng)建都可以齐鲤。
假設(shè)我們讀取配置中心的應(yīng)用名為
config-client
,那么我們可以在git倉(cāng)庫(kù)中該項(xiàng)目的默認(rèn)配置文件config-client.yml
:
info:
profile: default
為了演示加載不同環(huán)境的配置椒楣,我們可以在git倉(cāng)庫(kù)中再創(chuàng)建一個(gè)針對(duì)dev環(huán)境的配置文件config-client-dev.yml:
info:
profile: dev
構(gòu)建配置中心
通過(guò)Spring Cloud Config來(lái)構(gòu)建一個(gè)分布式配置中心非常簡(jiǎn)單给郊,只需要三步:
創(chuàng)建一個(gè)基礎(chǔ)的Spring Boot工程,命名為:config-server-git撒顿,并在pom.xml中引入下面的依賴(lài)(省略了parent和dependencyManagement部分):
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
創(chuàng)建Spring Boot的程序主類(lèi)丑罪,并添加@EnableConfigServer注解荚板,開(kāi)啟Spring Cloud Config的服務(wù)端功能凤壁。
@EnableConfigServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
在application.yml中添加配置服務(wù)的基本信息以及Git倉(cāng)庫(kù)的相關(guān)信息吩屹,例如:
spring
application:
name: config-server
cloud:
config:
server:
git:
uri: http://git.oschina.net/didispace/config-repo-demo/
server:
port: 1201
到這里,使用一個(gè)通過(guò)Spring Cloud Config實(shí)現(xiàn)拧抖,并使用Git管理配置內(nèi)容的分布式配置中心就已經(jīng)完成了煤搜。我們可以將該應(yīng)用先啟動(dòng)起來(lái),確保沒(méi)有錯(cuò)誤產(chǎn)生唧席,然后再?lài)L試下面的內(nèi)容擦盾。
如果我們的Git倉(cāng)庫(kù)需要權(quán)限訪(fǎng)問(wèn),那么可以通過(guò)配置下面的兩個(gè)屬性來(lái)實(shí)現(xiàn)淌哟;
spring.cloud.config.server.git.username:訪(fǎng)問(wèn)Git倉(cāng)庫(kù)的用戶(hù)名
spring.cloud.config.server.git.password:訪(fǎng)問(wèn)Git倉(cāng)庫(kù)的用戶(hù)密碼
完成了這些準(zhǔn)備工作之后迹卢,我們就可以通過(guò)瀏覽器、POSTMAN或CURL等工具直接來(lái)訪(fǎng)問(wèn)到我們的配置內(nèi)容了徒仓。訪(fǎng)問(wèn)配置信息的URL與配置文件的映射關(guān)系如下:
/{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掉弛。我們可以嘗試構(gòu)造不同的url來(lái)訪(fǎng)問(wèn)不同的配置內(nèi)容症见,比如,要訪(fǎng)問(wèn)master分支殃饿,config-client應(yīng)用的dev環(huán)境谋作,就可以訪(fǎng)問(wèn)這個(gè)url:http://localhost:1201/config-client/dev/master,并獲得如下返回:
{
"name": "config-client",
"profiles": [
"dev"
],
"label": "master",
"version": null,
"state": null,
"propertySources": [
{
"name": "http://git.oschina.net/didispace/config-repo-demo/config-client-dev.yml",
"source": {
"info.profile": "dev"
}
},
{
"name": "http://git.oschina.net/didispace/config-repo-demo/config-client.yml",
"source": {
"info.profile": "default"
}
}
]
}
我們可以看到該Json中返回了應(yīng)用名:config-client乎芳,環(huán)境名:dev遵蚜,分支名:master,以及default環(huán)境和dev環(huán)境的配置內(nèi)容奈惑。
構(gòu)建客戶(hù)端
在完成了上述驗(yàn)證之后谬晕,確定配置服務(wù)中心已經(jīng)正常運(yùn)作,下面我們嘗試如何在微服務(wù)應(yīng)用中獲取上述的配置信息携取。
- 創(chuàng)建一個(gè)Spring Boot應(yīng)用攒钳,命名為
config-client
,并在pom.xml
中引入下述依賴(lài):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
創(chuàng)建Spring Boot的應(yīng)用主類(lèi)雷滋,具體如下:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}
創(chuàng)建bootstrap.yml配置不撑,來(lái)指定獲取配置文件的config-server-git位置,例如:
spring:
application:
name: config-client
cloud:
config:
uri: http://localhost:1201/
profile: default
label: master
server:
port: 2001
上述配置參數(shù)與Git中存儲(chǔ)的配置文件中各個(gè)部分的對(duì)應(yīng)關(guān)系如下:
spring.application.name:對(duì)應(yīng)配置文件規(guī)則中的{application}部分
spring.cloud.config.profile:對(duì)應(yīng)配置文件規(guī)則中的{profile}部分
spring.cloud.config.label:對(duì)應(yīng)配置文件規(guī)則中的{label}部分
spring.cloud.config.uri:配置中心config-server的地址
這里需要格外注意:上面這些屬性必須配置在bootstrap.properties中晤斩,這樣config-server中的配置信息才能被正確加載焕檬。
在完成了上面你的代碼編寫(xiě)之后,讀者可以將config-server-git澳泵、config-client都啟動(dòng)起來(lái)
{
"profile": "default"
}
另外实愚,我們也可以修改config-client的profile為dev來(lái)觀(guān)察加載配置的變化。
從現(xiàn)在開(kāi)始,我這邊會(huì)將近期研發(fā)的springcloud微服務(wù)云架構(gòu)的搭建過(guò)程和精髓記錄下來(lái)腊敲,幫助更多有興趣研發(fā)spring cloud框架的朋友击喂,希望可以幫助更多的好學(xué)者。大家來(lái)一起探討spring cloud架構(gòu)的搭建過(guò)程及如何運(yùn)用于企業(yè)項(xiàng)目碰辅。完整項(xiàng)目的源碼來(lái)源 技術(shù)支持1791743380