spring cloud是現(xiàn)在流行的分布式服務(wù)框架,它提供了很多有用的組件。比如:配置中心、eureka服務(wù)發(fā)現(xiàn)、消息總線、熔斷機(jī)制等。
配置中心在spring cloud的眾多組件中是比較基礎(chǔ)的,它提供了配置文件的統(tǒng)一管理,可以很輕松的切換不通的環(huán)境。
它的具體結(jié)構(gòu)如下:
- 存儲(chǔ)配置文件的文件系統(tǒng)(通常使用git)
- 配置中心服務(wù)端(從文件系統(tǒng)獲取最新的配置文件,為客戶端提供配置信息)
- 配置客戶端(從配置中心獲取配置信息)
spring cloud是建立在spring boot基礎(chǔ)上的,spring cloud離不開spring boot,所以我們的項(xiàng)目都是基于spring boot的。
配置文件一般我們放在git上,也好做版本控制。接下來我們講一下配置中心的搭建。
配置中心搭建
首先,引入spring boot和spring cloud的依賴bom:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<dependencymanagement> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-dependencies</artifactid> <version>edgware.sr3</version> <type>pom</type> <scope> import </scope> </dependency> <dependency> <!-- import dependency management from spring boot --> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-dependencies</artifactid> <version> 1.5 . 9 .release</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencymanagement> |
這里我們需要仔細(xì)看一下官方文檔,spring cloud的finchley版本是基于spring boot2.0的,在spring boot1.5下是不能工作的。而edgware版本是基于1.5的,在2.0下不能正常工作。這點(diǎn)大家要注意,以免出現(xiàn)不必要的麻煩。
這里我們采用spring cloud 的edgware和spring boot的1.5版本。
然后倒入必須的依賴,如下:
1
2
3
4
5
6
7
8
9
10
|
<dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-config-server</artifactid> </dependency> </dependencies> |
最后編寫配置中心的啟動(dòng)類,如下:
1
2
3
4
5
6
7
|
@springbootapplication @enableconfigserver public class configserverapplication { public static void main(string[] args) { springapplication.run(configserverapplication. class , args); } } |
@enableconfigserver標(biāo)志著這個(gè)服務(wù)是一個(gè)配置中心服務(wù),具體的信息在application.properties文件中配置:
1
2
3
4
5
6
|
#服務(wù)端口 server.port= 9000 #配置文件的git地址 spring.cloud.config.server.git.uri=https: //github.com/liubo-tech/spring-cloud-properties #配置文件的臨時(shí)文件目錄 spring.cloud.config.server.git.basedir=/d:/config-repo |
服務(wù)端口和git地址大家都比較明白,第三個(gè)是配置臨時(shí)文件的目錄。在配置中心被調(diào)用后,配置中心會(huì)從git上拉取配置文件,并在本地緩存,這個(gè)就是配置緩存的目錄,也可以不配置,使用系統(tǒng)默認(rèn)的。這樣配置中心就搭好了,也可以通過nginx搭建集群做的高可用。
訪問配置文件格式的如下:
1
2
3
4
5
|
/{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties |
其中:
- {application}對應(yīng)客戶端的應(yīng)用名稱(spring.application.name)
- {profile}對應(yīng)客戶端的spring.profiles.active
- {label}是可選的git標(biāo)簽(默認(rèn)為“master”)。
客戶端調(diào)用
以前配置文件都是放在項(xiàng)目中,這使得我們在切換不同環(huán)境時(shí)非常麻煩,一些配置的敏感信息也對開發(fā)人員暴露了。
使用統(tǒng)一的配置中心就可以避免這些,讓我們看一看客戶端是如何調(diào)用的。
首先,導(dǎo)入必須依賴的jar包,如下:
1
2
3
4
5
6
7
8
9
10
|
<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> |
只要spring cloud config client的jar在項(xiàng)目的classpath下,它就會(huì)在項(xiàng)目啟動(dòng)時(shí)從配置中心獲取配置,通過bootstrap配置文件中的spring.cloud.config.uri屬性指定配置中心。
這使得客戶端的項(xiàng)目必須有一個(gè)bootstrap.yml或者bootstrap.properties文件,否則客戶端是不會(huì)從配置中心加載配置文件的。
我們創(chuàng)建bootstrap.properties,如下:
1
2
|
#配置中心地址 spring.cloud.config.uri=http: //localhost:9000 |
指定配置中心的地址,上面的例子中,配置中心的端口我們指定9000。我們在application.properties文件中配置應(yīng)用的名稱:
1
|
spring.application.name=eg-config |
我們應(yīng)用叫作“eg-config”,項(xiàng)目啟動(dòng)時(shí)會(huì)從配置中心加載eg-config的文件。接下來我們做個(gè)例子,創(chuàng)建一個(gè)bean,并從配置中心注入值
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@component public class mybean { @value ( "${my.name}" ) private string name; public string getname() { return name; } public void setname(string name) { this .name = name; } } |
其中,name會(huì)從配置中心加載屬性my.name。啟動(dòng)類如下:
1
2
3
4
5
6
7
8
9
10
|
@springbootapplication public class application { public static void main(string[] args) { configurableapplicationcontext applicationcontext = springapplication.run(application. class , args); //獲取bean并打印name字段 mybean bean = applicationcontext.getbean(mybean. class ); system.out.println(bean.getname()); } } |
啟動(dòng)后,控制臺(tái)打印的結(jié)果如下:test
這樣配置中心就介紹完了,具體請參考項(xiàng)目示例:https://github.com/liubo-tech/spring-cloud-config。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://www.jianshu.com/p/799835bd5ccf