springcloud入門之配置中心
開發分散式系統如果還是各個服務配置檔案單獨配置肯定是不行的,springcloud使用的解決方案是搭建配置中心將並指定一個配置檔案路徑如git專案對配置檔案進行統一管理。
在Spring Cloud中,提供了分散式配置中心元件spring cloud config ,它支援配置服務放在配置服務的記憶體中(即本地),也支援放在遠端Git倉庫中。在實現cloud config中,主要有兩個角色:作為配置中心連線配置路徑的 config server,連線配置中心讀取配置的config client。
使用springcloud 搭建一個入門的配置中心 config server
基本步驟:
1.新建一個springboot專案,依賴選擇 config server,eureka,web
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId >spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.程式啟動類Application加上註解@EnableConfigServer註解開啟配置伺服器的功能
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
3.配置檔案application.yml配置服務和配置檔案路徑
eureka:
client:
register-with-eureka: false
fetch-registry: false
server:
port: 8040
spring:
application:
name: microservice-config-server
cloud:
config:
server:
git:
uri: https://github.com/eacdy/spring-cloud-study/ # 配置git倉庫的地址
search-paths: config-repo # git倉庫地址下的相對地址,可以配置多個,用,分割。
username: # git倉庫的賬號
password: # git倉庫的密碼
本專案git倉庫為測試倉庫,可直接使用測試
注:配置中心專案除了在匯入eureka依賴並在程式啟動類Application上加上註解@EnableConfigServer表示該專案是配置中心,還需要在配置檔案中配置
eureka:
client:
register-with-eureka: false
fetch-registry: false
避免配置中心向自己釋出服務導致程式報錯服務啟動不了。如果不加專案啟動時報錯:Cannot execute request on any known server
使用springcloud搭建入門配置服務client
基本步驟
1.新建springboot專案,依賴選擇 config,web,actuator
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- client需要新增以下依賴,否則訪問/refresh將會得到404 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
注:作為config client需要新增以下依賴,否則訪問/refresh將會得到404
controller需要新增@RefreshScope註解,否則配置無法重新整理
2.配置檔案配置bootstrap.yml(自行建立檔案)
spring:
application:
name: microservice-config-client # 對應config-server所獲取的配置檔案的{application}
cloud:
config:
uri: http://localhost:8040/
profile: dev # 指定profile,對應config-server所獲取的配置檔案中的{profile}
label: master # 指定git倉庫的分支,對應config-server所獲取的配置檔案的{label}
application.yml配置本地專案啟動載入如服務埠server.port=8041
注:為什麼不直接把配置全部直接寫入application.yml而是另建bootstrap.yml:
因為config部分的配置先於 application.yml 被載入,而 bootstrap.yml 中的配置會先於 application.yml 載入,如果直接寫在application.yml會導致專案啟動時無法讀取到配置中心配置檔案導致報錯。
3.編寫controller類測試配置讀取情況
@RestController
@RefreshScope
public class TestConfigTontroller {
//這個@Value會根據配置的配置中心地址找到git倉庫對應的配置和本地服務的配置檔案
@Value("${profile}")
private String configValue;
@RequestMapping("testConfig")
public String test(){
return "讀取到配置中心:"+configValue;
}
}
springcloud config 的client實現讀取配置的大體路徑:
config-server從git倉庫讀取到配置檔案,config-client再通過訪問config-server獲取到配置屬性