Spring Cloud Config
Spring Cloud Config為分布式系統(tǒng)中的外部化配置提供服務(wù)器和客戶端支持。Spring Cloud Config 是一種用來(lái)動(dòng)態(tài)獲取Git、SVN、本地的配置文件的一種工具。可以在所有環(huán)境中管理應(yīng)用程序的外部屬性。可以與任何語(yǔ)言運(yùn)行的任何應(yīng)用程序一起使用。當(dāng)應(yīng)用程序通過(guò)部署從開發(fā)到測(cè)試并進(jìn)入生產(chǎn)時(shí),可以管理這些環(huán)境之間的配置,并確保應(yīng)用程序具有遷移時(shí)需要運(yùn)行的所有內(nèi)容。服務(wù)器存儲(chǔ)后端的默認(rèn)實(shí)現(xiàn)使用git,可以輕松支持配置環(huán)境的標(biāo)簽版本,以及可用于管理內(nèi)容的各種工具。添加替代實(shí)現(xiàn)并使用Spring配置插入很容易。
Github地址:https://github.com/spring-cloud/spring-cloud-config
官方指引:https://spring.io/projects/spring-cloud-config
Spring Cloud Config Server功能:
1.用于外部配置的HTTP,基于資源的API(名稱 - 值對(duì)或等效的YAML內(nèi)容)
2.加密和解密屬性值(對(duì)稱或非對(duì)稱)
3.使用可輕松嵌入Spring Boot應(yīng)用程序 @EnableConfigServer
Spring Cloud Config Client功能(適用于Spring應(yīng)用程序):
1.綁定到Config Server并Environment使用遠(yuǎn)程屬性源初始化Spring
2.加密和解密屬性值(對(duì)稱或非對(duì)稱)
SpringBoot集成Spring Cloud Config Server
版本說(shuō)明
SpringBoot:2.1.3.RELEASE
SpringCloud:Greenwich.SR1
引入Spring Cloud Config Server依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
這里使用Eureka注冊(cè)中心,所以需要加上
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置很簡(jiǎn)單 只需要在啟動(dòng)類上加@EnableEurekaClient開啟Eureka客戶端,@EnableConfigServer開啟統(tǒng)一配置中心
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class SpringcloudConfigApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudConfigApplication.class, args);
}
}
創(chuàng)建配置倉(cāng)庫(kù)
可以在私人Gitlab,碼云,Github等等創(chuàng)建
我這里是在Github上創(chuàng)建的配置文件,一般都是yml或者properties配置文件
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
需要在項(xiàng)目的配置文件中指定連接的倉(cāng)庫(kù),用戶名和密碼

spring.cloud.config.server.git.uri就是倉(cāng)庫(kù)的訪問(wèn)地址
spring:
application:
name: config
cloud:
config:
server:
git:
uri: 項(xiàng)目配置倉(cāng)庫(kù)的位置,這個(gè)位置可以是:git文件夾、svn文件夾或者github項(xiàng)目位置,任何能訪問(wèn)到文件的地方。
username: 登錄用戶名
password: 登錄密碼
下面進(jìn)行測(cè)試
先啟動(dòng)Eureka注冊(cè)中心,在啟動(dòng)統(tǒng)一配置中心

在控制臺(tái)可以看到 會(huì)在臨時(shí)目錄中創(chuàng)建一份配置文件
驗(yàn)證配置是否生效
在瀏覽器訪問(wèn):http://localhost:8080/config-a.yml

官方提供http查看方式
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
application:應(yīng)用名 ,也就是spring.application.name
label:分支名,默認(rèn)master
profile:環(huán)境名,環(huán)境可以在配置文件的屬性名是env,不設(shè)置也可以
SpringBoot集成Spring Cloud Config Client
版本說(shuō)明
SpringBoot:2.1.3.RELEASE
SpringCloud:Greenwich.SR1
引入Spring Cloud Config Client依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
這里使用Eureka注冊(cè)中心,所以需要加上
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
不需要在啟動(dòng)類中加入注解
由于是統(tǒng)一配置中心的客戶端,所以需要在yml配置文件中配置
spring:
cloud:
config:
discovery:
enabled: true
service-id: config
profile: dev
spring.cloud.config.discovery.enabled:開啟配置服務(wù)發(fā)現(xiàn)
spring.cloud.config.discovery.service-id:配置服務(wù)實(shí)例名稱,也就是Config Server的應(yīng)用名
spring.cloud.config.label:是配置分支名,默認(rèn)是master,可以不配置
spring.cloud.config.profile:環(huán)境名,對(duì)應(yīng)Config Server的env
dev:開發(fā)環(huán)境
test:測(cè)試環(huán)境
pro:正式環(huán)境
重點(diǎn):需要把配置文件名由application.yml改名為bootstrap.yml
場(chǎng)景:當(dāng)使用Spring Cloud的時(shí)候,配置信息一般是從Config Server加載的,為了取得配置信息(比如密碼等),需要提早讀取配置。因此,把 Config Server 信息放在bootstrap.yml,用來(lái)加載需要的配置信息
原理:bootstrap.yml是被一個(gè)父級(jí)的 Spring ApplicationContext加載的。這個(gè)父級(jí)的 Spring ApplicationContext是先加載的,在加載application.yml 的 ApplicationContext之前。
bootstrap與application
bootstrap.yml(bootstrap.properties)用來(lái)程序引導(dǎo)時(shí)執(zhí)行,應(yīng)用于更加早期配置信息讀取,如可以使用來(lái)配置application.yml中使用到參數(shù)等
application.yml(application.properties) 應(yīng)用程序特有配置信息,可以用來(lái)配置后續(xù)各個(gè)模塊中需使用的公共參數(shù)等。
配置完啟動(dòng)就可以讀取遠(yuǎn)程倉(cāng)庫(kù)的配置文件了