Spring Cloud之配置中心的搭建
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離不開(kāi)Spring Boot,所以我們的項(xiàng)目都是基于Spring Boot的。
配置文件一般我們放在git上,也好做版本控制。接下來(lái)我們講一下配置中心的搭建。
配置中心搭建
首先,引入Spring Boot和Spring Cloud的依賴BOM:
<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版本。
然后倒入必須的依賴,如下:
<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>
最后編寫(xiě)配置中心的啟動(dòng)類(lèi),如下:
@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文件中配置:
#服務(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)的。這樣配置中心就搭好了,也可以通過(guò)Nginx搭建集群做的高可用。
訪問(wèn)配置文件格式的如下:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
其中:
- {application}對(duì)應(yīng)客戶端的應(yīng)用名稱(spring.application.name)
- {profile}對(duì)應(yīng)客戶端的spring.profiles.active
- {label}是可選的git標(biāo)簽(默認(rèn)為“master”)。
客戶端調(diào)用
以前配置文件都是放在項(xiàng)目中,這使得我們?cè)谇袚Q不同環(huán)境時(shí)非常麻煩,一些配置的敏感信息也對(duì)開(kāi)發(fā)人員暴露了。
使用統(tǒng)一的配置中心就可以避免這些,讓我們看一看客戶端是如何調(diào)用的。
首先,導(dǎo)入必須依賴的jar包,如下:
<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í)從配置中心獲取配置,通過(guò)bootstrap配置文件中的spring.cloud.config.uri屬性指定配置中心。
這使得客戶端的項(xiàng)目必須有一個(gè)bootstrap.yml或者bootstrap.properties文件,否則客戶端是不會(huì)從配置中心加載配置文件的。
我們創(chuàng)建bootstrap.properties,如下:
#配置中心地址 spring.cloud.config.uri=http://localhost:9000
指定配置中心的地址,上面的例子中,配置中心的端口我們指定9000。我們?cè)赼pplication.properties文件中配置應(yīng)用的名稱:
spring.application.name=eg-config
我們應(yīng)用叫作“eg-config”,項(xiàng)目啟動(dòng)時(shí)會(huì)從配置中心加載eg-config的文件。接下來(lái)我們做個(gè)例子,創(chuàng)建一個(gè)Bean,并從配置中心注入值
@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)類(lèi)如下:
@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
這樣配置中心就介紹完了,具體請(qǐng)參考項(xiàng)目示例:https://github.com/liubo-tech/spring-cloud-config。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java正則表達(dá)式匹配規(guī)則超詳細(xì)總結(jié)
正則表達(dá)式并不僅限于某一種語(yǔ)言,但是在每種語(yǔ)言中有細(xì)微的差別,下面這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式匹配規(guī)則的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
SpringBoot下實(shí)現(xiàn)session保持方式
這篇文章主要介紹了SpringBoot下實(shí)現(xiàn)session保持方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
java實(shí)現(xiàn)二叉樹(shù)的創(chuàng)建及5種遍歷方法(總結(jié))
下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)二叉樹(shù)的創(chuàng)建及5種遍歷方法(總結(jié))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
淺談SpringMVC HandlerInterceptor詭異問(wèn)題排查
這篇文章主要介紹了淺談SpringMVC HandlerInterceptor詭異問(wèn)題排查,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
Java實(shí)現(xiàn)拓?fù)渑判蛩惴ǖ氖纠a
在圖論中,拓?fù)渑判颍═opological Sorting)是一個(gè)有向無(wú)環(huán)圖(DAG, Directed Acyclic Graph)的所有頂點(diǎn)的線性序列。本文將為大家講講拓?fù)渑判蛩惴ǖ脑砑皩?shí)現(xiàn),需要的可以參考一下2022-07-07
Maven學(xué)習(xí)----Maven安裝與環(huán)境變量配置教程
這篇文章主要給大家介紹了關(guān)于如何利用Maven入手Spring Boot第一個(gè)程序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06
Java實(shí)現(xiàn)簡(jiǎn)單文件過(guò)濾器功能
下面小編就為大家分享一篇Java實(shí)現(xiàn)簡(jiǎn)單文件過(guò)濾器功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Java的Junit測(cè)試框架中的其他注解說(shuō)明
這篇文章主要介紹了Java的Junit測(cè)試框架中的其他注解說(shuō)明,JUnit是一個(gè)開(kāi)源的java單元測(cè)試框架,它是XUnit測(cè)試體系架架構(gòu)的一種體現(xiàn),2023-10-10
是Java語(yǔ)言事實(shí)上的標(biāo)準(zhǔn)單元測(cè)試庫(kù),需要的朋友可以參考下

