Spring Cloud Config(以下簡(jiǎn)稱配置中心)支持配置放在本地的配置服務(wù)內(nèi)存中,同時(shí)也可以放在git倉(cāng)庫(kù)中進(jìn)行讀取,本文示例通過git倉(cāng)庫(kù)實(shí)現(xiàn)配置讀取。
一、服務(wù)端配置
- 服務(wù)端配置分創(chuàng)建配置git倉(cāng)庫(kù)和服務(wù)端配置讀取。
1、git倉(cāng)庫(kù)創(chuàng)建
在創(chuàng)建配置中心時(shí)為后續(xù)維護(hù)方便,應(yīng)對(duì)配置文件進(jìn)行分包、分環(huán)境進(jìn)行創(chuàng)建。具體注意事項(xiàng)見代碼注釋
- 分包:這里所指的分包其實(shí)是只git的目錄結(jié)構(gòu)符合一定規(guī)則。
- 分環(huán)境:不同的環(huán)境對(duì)應(yīng)不同的配置,比如:生產(chǎn)環(huán)境、測(cè)試環(huán)境、開發(fā)環(huán)境。
示例配置文件:config-client-dev.properties(該配置文件命名應(yīng)符合一定規(guī)則,具體說明見客戶端代碼注釋)
配置信息如下:
file = 1.jpg
word = 666
2、配置中心服務(wù)搭建
- maven配置
<groupId>com.wk.sc</groupId>
<artifactId>springcloud-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
<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>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- application.yml配置
server:
port: 6060
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/umeone/springcloud-config.git # 配置文件存放git地址,基于哪個(gè)git平臺(tái)或自己搭建,隨意
search-paths: pro-test # 配置文件存放路徑(文件夾),如果配置文件在項(xiàng)目根目錄,則不需要配置該值
username: # git賬號(hào) 當(dāng)git項(xiàng)目創(chuàng)建為public時(shí),不需要username和password
password: # git密碼
label: master # git配置文件所在分支
- 啟動(dòng)類
@EnableConfigServer //開啟配置服務(wù)器功能
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
至此,簡(jiǎn)單的配置中心服務(wù)端就算搭建完成了。啟動(dòng)服務(wù)進(jìn)行測(cè)試,看是否搭建成功。
執(zhí)行請(qǐng)求:http://localhost:6060/config-client/dev (該地址符合一定規(guī)則,客戶端配置文件注釋會(huì)說明) 得到如下返回結(jié)果:
{
"name": "config-client",
"profiles": ["dev"],
"label": null,
"version": "167af1f8aeb67958c22f656d2e14b032f6319da2",
"state": null,
"propertySources": [{
"name": "https://gitee.com/umeone/springcloud-config.git/config-client-dev.properties",
"source": {
"file": "1.jpg",
"word": "666"
}
}]
}
從該結(jié)果中可以看到,git中配置的信息已經(jīng)獲取到,說明服務(wù)沒問題。
二、客戶端配置
客戶端通過配置中心讀取git的配置信息,需要注意一些細(xì)節(jié)和規(guī)則,詳情在代碼注釋中進(jìn)行描述。
- maven配置
<groupId>com.wk.sc</groupId>
<artifactId>springcloud-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--注意與配置中心服務(wù)端不同-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- bootstrap.yml配置
# 注意此配置文件名為bootstrap.yml,而不是application.yml 后者不是默認(rèn)讀取文件名
server:
port: 6061
spring:
application:
name: config-client1
cloud:
config:
label: master # 指定分支
profile: dev # 指定環(huán)境, 和配置文件后綴dev一致
uri: http://localhost:6060/ # 配置服務(wù)中心地址
name: config-client
# spring.cloud.config.name 值和配置文件的名稱保持一定規(guī)則。如此處名稱,在git中的配置文件名應(yīng)為config-client-dev.properties ,前綴保持一致,后面的dev為不同環(huán)境的區(qū)分,這個(gè)規(guī)則和Springboot配置文件的環(huán)境區(qū)分類似。
# 如果該值沒有配置,項(xiàng)目啟動(dòng)時(shí)會(huì)取spring.application.name值作為默認(rèn)值(這僅僅是個(gè)猜測(cè),通過更改name值進(jìn)行測(cè)試,沒有查看源碼實(shí)現(xiàn),要想確定是否猜測(cè)正確,需要從源碼進(jìn)行確認(rèn))
# URL與配置文件的映射關(guān)系:
# /{application}/{profile}[/{label}]
# /{application}-{profile}.yml
# /{label}/{application}-{profile}.yml
# /{application}-{profile}.properties
# /{label}/{application}-{profile}.properties
此處需要特別注意,配置文件名變成了bootstrap.yml,如果使用application.yml,項(xiàng)目啟動(dòng)時(shí)不會(huì)去加載配置信息,所有配置將采用默認(rèn)配置
- 啟動(dòng)類和配置獲取
@RestController
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
@Value("${file}") //如果配置中心獲取失敗則項(xiàng)目啟動(dòng)報(bào)錯(cuò)
private String file;
@Value("${word}")
private String word;
@RequestMapping(value = "/test")
public String test() {
return file + ":" + word;
}
}
至此客戶端配置完成。啟動(dòng)項(xiàng)目看是否成功,如果報(bào)錯(cuò)提示獲取不到對(duì)應(yīng)配置信息,說明配置有問題,在項(xiàng)目啟動(dòng)的輸出日志中仔細(xì)查看配置信息是否正確。以下為成功啟動(dòng)的部分輸出日志:
2019-04-10 10:00:33.690 INFO 5708 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:6060/
2019-04-10 10:00:35.368 INFO 5708 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=config-client, profiles=[dev], label=master, version=167af1f8aeb67958c22f656d2e14b032f6319da2, state=null
2019-04-10 10:00:35.368 INFO 5708 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='https://gitee.com/umeone/springcloud-config.git/config-client-dev.properties'}]}
2019-04-10 10:00:35.372 INFO 5708 --- [ main] com.wk.sc.cc.ConfigClientApplication : No active profile set, falling back to default profiles: default
如果啟動(dòng)報(bào)錯(cuò),注意查看Fetching config from server Located environment Located property source對(duì)應(yīng)值是否是配置文件所配置的信息。
上文提到的配置文件名稱bootstrap.yml如果不正確,就會(huì)出現(xiàn)配置信息和這里的加載信息不一致的問題,可以明顯看出項(xiàng)目啟動(dòng)加載的是默認(rèn)配置信息。
- 配置測(cè)試
瀏覽器發(fā)送請(qǐng)求:http://localhost:6061/test
返回結(jié)果:
1.jpg:666
以上結(jié)果說明配置可用。