前言
在分布式系統中,會涉及大量的配置檔案。項目環境中有:開發環境、測試環境、生産環境。這些環境的配置又是不一樣的。例如:資料庫的配置、端口号的配置、其他中間件和相關元件的配置都可能不一樣。那麼,如何更加友善的對這些配置檔案進行統一管理和實時更新呢?因為Spring Cloud是全家桶,是以,也提供了配置中心元件Spring Cloud Config,下面就給大家講解如何使用它。
Spring Cloud Config和注冊中心Eureka相似,都有服務端和用戶端,Config-Server用來存放配置檔案。而Config-Client用來讀取配置檔案。
Config-Server的搭建
Config-Server也算是一個服務,需要往注冊中心中注冊。是以,建立一個服務,命名為:config-server,然後在pom中導入限制。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
接着在啟動類上加上@EnableConfigServer注解,表示開啟配置伺服器的功能。Spring Cloud Config可以使用資料庫存儲配置内容,也可以使用Git倉庫存儲配置内容。部落客這裡就用Git當做容器了。當然,大家需要到GitHub的官網上注冊一個賬号。作為程式員,應該是經常通路這個“全球最大的同性交友網站”,是以,賬号什麼的就不講了。
重點就是需要建立一個存放配置的倉庫。

隻需要填寫倉庫名稱,點選建立即可。因為Git中有分支的概念,是以,master就作為開發環境;建立一個v1.0分支,作為測試環境。關于Git方面的内容,讀者可以自行去查閱相關資料。
就以使用者服務為例,把配置檔案放入配置中心。在master分支,建立一個user-service.yml檔案,寫入相應的配置檔案。
為了測試不同環境,這裡添加了兩個配置。environment(環境)和branch(分支)。然後,在v1.0分支,同樣建立一個user-service.yml檔案,寫入配置檔案。
基本上Git相關的操作就完成了。還需要對config-server的配置檔案進行修改。
spring:
application:
name: config-server
#配置中心相關的配置
cloud:
config:
server:
git:
#路徑
uri: https://github.com/Qingfengchuiwoxin/config-center
username: *********
password: *********
#配置逾時
timeout: 5
#預設分支
default-label: master
server:
port: 7777
#指定注冊中心
eureka:
client:
service-url:
defaultzone: http://localhost:8761/eureka/
服務名稱、端口号、注冊中心,是每一個服務都需要配置的。
配置中心相關的配置:
uri:是Git上配置中心所在倉庫的位址,直接複制粘貼到這裡就行了。注意的是,不需要結尾的.git
username:Git倉庫的使用者名。
password:密碼。
timeout:指定讀取配置檔案的逾時時間。
default-label:指定預設分支。
上面的配置,讀者根據自己的情況自行配置即可。然後,啟動服務,進行通路。
http請求位址和資源檔案映射如下:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
Spring Cloud Config支援yml、properties、json三種格式的輸出,部落客喜歡json的方式,是以,不要在意這些。通過這個路徑,成功的通路到了Git倉庫中的配置檔案。這裡的environment為dev,branch為dev,是因為配置檔案中配置了default-label這個屬性。可以在位址欄加上分支名,進行測試。
http://localhost:7777/master/user-service.json
可以看到和第一通路的結果一樣,得到的是master分支的内容。
http://localhost:7777/v1.0/user-service.json
帶上v1.0分支的路徑,就傳回了v1.0分支中的配置了。到這裡。Config-Server就搭建完成了,那麼如何在Config-Client中使用呢?接下來,就給大家講Config-Client的使用。
Config-Client的搭建
這裡就不搭建Config-Client了,就對以前的使用者服務進行改造。要使用一個元件,最首要的就是導入限制啦。
<!-- 配置中心用戶端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
然後就是修改配置檔案了,注意,這裡不能再使用以前的application.yml檔案了。需要把檔案名改為bootstrap.yml。因為bootstrap.yml是在application.yml之前加載的,至于原因,讀者自行查閱相關資料。
#應用名稱
spring:
application:
name: user-service
#指定從哪個配置中心讀取
cloud:
config:
discovery:
#指定服務id
service-id: config-server
#開啟服務支援
enabled: true
#指定哪個分支
label: v1.0
#指定注冊中心
eureka:
client:
service-url:
defaultzone: http://localhost:8761/eureka/
service-id:對應config-server服務的id。
enable:開啟config服務的支援。
label:和前面的配置一樣,指定分支。
為了更好地反映測試效果,寫一個測試類。
package com.root.project.userservice.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName: ConfigClilentController
* @Author: 清風一陣吹我心
* @Description: TODO
* @Date: 2019/2/23 16:08
* @Version 1.0
**/
@RestController
@RequestMapping("/cloud")
public class ConfigClientController {
@Value("${environment}")
private String environment;
@Value("${branch}")
private String branch;
@Value("${server.port}")
private String port;
@GetMapping(value = "/config")
public String getConfig() {
return "目前分支:" + branch + ",所屬環境:" + environment + ",端口号" + port;
}
}
使用@Value注解來讀取配置檔案中的值,這裡就對環境、分支、端口進行讀取。
然後,啟動注冊中心、config-server服務、使用者服務。通路:http://localhost:8801/cloud/config
可以看到成功讀取配置檔案的值,目前處于v1.0分支的測試環境。修改配置檔案的label屬性,改為master。重新開機服務。通路:http://localhost:8800/cloud/config
得到了成功的響應。基本上Spring Cloud Config的使用就講完了。當然。作為Spring Cloud的配置中心元件,這些隻是簡單的應用,以後會涉及更深的知識,期待與各位下次再見。
這一路,一直為你加油的那個人,是你自己!