SpringBoot實戰電商項目mall(20k+star)地址:github.com/macrozheng/…java
Spring Cloud Config 能夠爲微服務架構中的應用提供集中化的外部配置支持,它分爲服務端和客戶端兩個部分,本文將對其用法進行詳細介紹。git
Spring Cloud Config 分爲服務端和客戶端兩個部分。服務端被稱爲分佈式配置中心,它是個獨立的應用,能夠從配置倉庫獲取配置信息並提供給客戶端使用。客戶端能夠經過配置中心來獲取配置信息,在啓動時加載配置。Spring Cloud Config 的配置中心默認採用Git來存儲配置信息,因此自然就支持配置信息的版本管理,而且可使用Git客戶端來方便地管理和訪問配置信息。github
因爲Spring Cloud Config 須要一個存儲配置信息的Git倉庫,這裏咱們先在Git倉庫中添加好配置文件再演示其功能,Git倉庫地址爲:gitee.com/macrozheng/…。web
config:
info: "config info for dev(master)"
複製代碼
config:
info: "config info for test(master)"
複製代碼
config:
info: "config info for prod(master)"
複製代碼
config:
info: "config info for dev(dev)"
複製代碼
config:
info: "config info for test(dev)"
複製代碼
config:
info: "config info for prod(dev)"
複製代碼
這裏咱們建立一個config-server模塊來演示Spring Cloud Config 做爲配置中心的功能。spring
<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>
複製代碼
server:
port: 8901
spring:
application:
name: config-server
cloud:
config:
server:
git: #配置存儲配置信息的Git倉庫
uri: https://gitee.com/macrozheng/springcloud-config.git
username: macro
password: 123456
clone-on-start: true #開啓啓動時直接從git獲取配置
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
複製代碼
@EnableConfigServer
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
複製代碼
這裏咱們經過config-server來演示下如何獲取配置信息。bootstrap
# 獲取配置信息
/{label}/{application}-{profile}
# 獲取配置文件信息
/{label}/{application}-{profile}.yml
複製代碼
啓動eureka-server、config-server服務;安全
訪問http://localhost:8901/master/config-dev來獲取master分支上dev環境的配置信息;bash
咱們建立一個config-client模塊來從config-server獲取配置。架構
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
複製代碼
server:
port: 9001
spring:
application:
name: config-client
cloud:
config: #Config客戶端配置
profile: dev #啓用配置後綴名稱
label: dev #分支名稱
uri: http://localhost:8901 #配置中心地址
name: config #配置文件名稱
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
複製代碼
/** * Created by macro on 2019/9/11. */
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return configInfo;
}
}
複製代碼
啓動config-client服務;app
訪問http://localhost:9001/configInfo,能夠獲取到dev分支下dev環境的配置;
config info for dev(dev)
複製代碼
咱們不只能夠把每一個項目的配置放在不一樣的Git倉庫存儲,也能夠在一個Git倉庫中存儲多個項目的配置,此時就會用到在子目錄中搜索配置信息的配置。
spring:
cloud:
config:
server:
git:
search-paths: '{application}'
複製代碼
config info for config dir dev(dev)
複製代碼
當Git倉庫中的配置信息更改後,咱們能夠經過SpringBoot Actuator的refresh端點來刷新客戶端配置信息,如下更改都須要在config-client中進行。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
複製代碼
management:
endpoints:
web:
exposure:
include: 'refresh'
複製代碼
/** * Created by macro on 2019/9/11. */
@RestController
@RefreshScope
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return configInfo;
}
}
複製代碼
update config info for config dir dev(dev)
複製代碼
咱們能夠經過整合SpringSecurity來爲配置中心添加安全認證。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
複製代碼
server:
port: 8905
spring:
application:
name: config-security-server
cloud:
config:
server:
git:
uri: https://gitee.com/macrozheng/springcloud-config.git
username: macro
password: 123456
clone-on-start: true #開啓啓動時直接從git獲取配置
security: #配置用戶名和密碼
user:
name: macro
password: 123456
複製代碼
server:
port: 9002
spring:
application:
name: config-client
cloud:
config:
profile: dev #啓用配置後綴名稱
label: dev #分支名稱
uri: http://localhost:8905 #配置中心地址
name: config #配置文件名稱
username: macro
password: 123456
複製代碼
使用bootstrap-security.yml啓動config-client服務;
訪問http://localhost:9002/configInfo進行測試,發現能夠獲取到配置信息。
config info for dev(dev)
複製代碼
在微服務架構中,全部服務都從配置中心獲取配置,配置中心一旦宕機,會發生很嚴重的問題,下面咱們搭建一個雙節點的配置中心集羣來解決該問題。
啓動兩個config-server分別運行在8902和8903端口上;
添加config-client的配置文件bootstrap-cluster.yml,主要是添加了從註冊中心獲取配置中心地址的配置並去除了配置中心uri的配置:
spring:
cloud:
config:
profile: dev #啓用環境名稱
label: dev #分支名稱
name: config #配置文件名稱
discovery:
enabled: true
service-id: config-server
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
複製代碼
config info for config dir dev(dev)
複製代碼
springcloud-learning
├── eureka-server -- eureka註冊中心
├── config-server -- 配置中心服務
├── config-security-server -- 帶安全認證的配置中心服務
└── config-client -- 獲取配置的客戶端服務
複製代碼
mall項目全套學習教程連載中,關注公衆號第一時間獲取。