SpringCloud:配置中心(spring cloud config)
spring cloud config簡介
為什麼要使用配置中心
簡單來說,就是為了方便所有服務的配置統一管理,實時更新。
在分散式的微服務架構中,服務數量會越來越多,而每個服務例項都會有一個或幾個配置檔案(yml,properties,json…)。而這些檔案,分佈在系統的各個角落,管理起來特別麻煩,因此出現了一些可以集中管理配置的元件。這裡的spring cloud config
就是其中之一。
為什麼要使用spring cloud config
類似這種分散式配置中心元件,分以下兩種角色:
1. config server
2. config client
而spring cloud config的優點則是和Spring的整合更好,介面規範一致,同時已有的Spring專案遷移也比較方便。同時和SpringBoot的標準統一,可以讓專案的版本依賴變得容易管理,減少可能出現的依賴衝突。
spring cloud config使用
服務端ConfigServer
新建一個簡單的SpringBoot的專案cloud-config。
新增依賴
在專案的pom.xml檔案中新增如下依賴:
<dependency>
<groupId>org.springframework.cloud</groupId >
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
新增配置檔案
在專案的resources目錄下,新建application.yml(也可以使用application.properties),在其中新增如下內容:
spring:
application:
name: config-server
# 配置中心服務配置
cloud:
config:
server:
git:
# git的uri
uri: https://gitee.com/lieh_666/SpringCloudConfig/
# 搜尋的資料夾
search-paths: clear-cloud
# 若git為公共專案的話,賬號密碼可以為空
username: xxxxxxxx
password: xxxxxxxx
#分支
label: master
server:
port: 8888
- spring.cloud.config.server.git.uri:配置git倉庫地址
- spring.cloud.config.server.git.searchPaths:配置倉庫路徑
- spring.cloud.config.label:配置倉庫的分支
- spring.cloud.config.server.git.username:訪問git倉庫的使用者名稱
- spring.cloud.config.server.git.password:訪問git倉庫的使用者密碼
開啟服務配置
新建專案啟動類ConfigServer
,通過@EnableConfigServer
開啟配置中心服務。
/**
* 在分散式系統中,由於服務數量巨多,為了方便服務配置檔案統一管理,實時更新,所以需要分散式配置中心元件。
* 在Spring Cloud中,有分散式配置中心元件spring cloud config
* 它支援配置服務放在配置服務的記憶體中(即本地)
* 也支援放在遠端Git倉庫中
* 在spring cloud config 元件中,分兩個角色
* 一是config server
* 二是config client
* 這裡是ConfigServer,
* 只需要開啟@SpringBootApplication和@EnableConfigServer
*
*/
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}
http請求地址和資原始檔對映如下(其中application為服務名):
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
客戶端ConfigClient
新建一個SpringBoot的專案config-client
新增依賴
在其pom檔案中新增如下依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
新增服務端的配置
在專案的resources目錄下,新建application.yml,在其中新增如下內容:
server:
port: 8889
spring:
application:
name: service-hello
#配置中心的配置資訊
cloud:
config:
label: master
profile: dev
uri: http://localhost:8888/
配置啟動類,並在Controller中獲取Git檔案中的屬性
新建啟動類HelloApplication,並使用@RestController
註冊為Controller介面。使用@Value
獲取屬性資訊:
/**
* 一個簡單的服務
*
*/
@EnableEurekaClient
@SpringBootApplication
@RestController
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
@Value("${msg}")
String msg;
@RequestMapping(value = "/hello")
public String hi(){
return msg;
}
}
因為配置服務名為service-hello
,profile
為dev
,因此在git的對應目錄(這裡為https://gitee.com/lieh_666/SpringCloudConfig/clear-cloud)下,新建一個service-hello-dev
的檔案,並在檔案中新增msg屬性如下:
msg = hello,this is git config
啟動服務端和客戶端
啟動ConfigServer
啟動ConfigClient
訪問http://localhost:8889/hello
執行結果如下: