SpringCloud(四) config
- 2021 年 12 月 26 日
- 筆記
- SpringCloud, springcloud config, 配置中心
Spring Cloud Config
在分散式系統中,尤其是當我們的分散式項目越來越多,每個項目都有自己的配置文件,對配置文件的統一管理就成了一種需要,而 Spring Cloud Config 就提供了對各個分散式項目配置文件的統一管理支援。
它包含 Client和 Server 兩個部分,Server 提供配置文件的存儲、以介面的形式將配置文件的內容提供出去,Client 通過介面獲取數據、並依據此數據初始化自己的應用。
構建 Springcloud config 配置中心
1、創建 Spring Boot 項目並添加如下依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2、在入口類上添加註解 @EnableConfigServer
3、在 application.yml中配置一下 git 倉庫資訊,這裡使用的是gitee碼雲,需要先在 gitee上 創建一個 spring-cloud-config 的項目
server:
port: 3721
spring:
application:
name: springcloud-config-server
cloud:
config:
server:
git:
uri:
search-paths: config-center
username:
password:
- uri 表示配置中心所在倉庫的位置
- search-paths 表示倉庫下的子目錄
- username 表示你的 gitee 用戶名
- password 表示你的 gitee 密碼
構建 Springcloud config 配置中心倉庫
首先在本地創建一個文件夾,然後在裡面創建一個文件夾叫 config-center,然後在 config-center中創建四個配置文件,如下:
application.properties
application-dev.properties
application-test.properties
application-online.properties
並分別寫:
url=//www.*.com
url=//www.dev.com
url=//www.test.com
url=//www.online.com
將本地文件推送到遠程倉庫:
git init # 初始化
git add config-center/ # 將文件添加到暫存區
git commit -m 'add config-center' # 把文件提交到本地倉庫
git remote add origin //github.com/hnylj/spring-cloud-config.git # 添加遠程主機
git push -u origin master # 將本地的 master 分支推送到 origin 主機
啟動配置中心,通過/{application}/{profile}/{label}訪問配置文件,
- {application} 表示配置文件的名字,對應的配置文件即 application,
- {profile} 表示環境,有 dev、test、online 及默認,
- {label} 表示分支,默認我們放在 master 分支上
訪問//localhost:3721/application/dev/master,返回結果:
{
"name":"application",
"profiles":[
"dev"
],
"label":"master",
"version":"4ac223e179ba14cd15079e8f486cc69a5d3a7a43",
"state":null,
"propertySources":[
{
"name":
"source":{
"url":"//www.dev.com"
}
},
{
"name":
"source":{
"url":"//www.*.com"
}
}
]
}
構建 Springcloud config 配置中心客戶端
-
創建一個Spring Boot 工程 springcloud-config-client,並添加依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
-
創建 bootstrap.yml 文件,用於獲取配置資訊
spring: application: name: application cloud: config: profile: dev label: master uri: //localhost:3721/
- uri:配置中心地址
-
創建一個 Controller 進行測試:
@RestController public class ConfigController { @Value("${url}") private String url; @Autowired private Environment env; @RequestMapping("/cloud/url") public String url1 () { return this.url; } @RequestMapping("/cloud/url2") public String url2 () { return env.getProperty("url"); } }
Springcloud config 的工作原理
- 首先需要一個遠程 Git 倉庫,平時測試可以使用 GitHub,在實際生產環境中,需要自己搭建一個 Git 伺服器,遠程 Git 倉庫的主要作用是用來保存我們的配置文件;
- 除了遠程 Git 倉庫之外,我們還需要一個本地 Git 倉庫,每當 Config Server訪問遠程 Git 倉庫時,都會克隆一份到本地,這樣當遠程倉庫無法連接時,就直接使用本地存儲的配置資訊;
- 微服務 A、微服務 B 則是我們的具體應用,這些應用在啟動的時會從 Config Server 中獲取相應的配置資訊;
- 當微服務 A、微服務 B 嘗試從 Config Server 中載入配置資訊的時候,Config Server 會先通過 git clone 命令克隆一份配置文件保存到本地;
- 由於配置文件是存儲在 Git 倉庫中,所以配置文件天然具有版本管理功能。
Springcloud config 的安全保護
生產環境中我們的配置中心肯定是不能隨隨便便被人訪問的,我們可以加上適當的保護機制,由於微服務是構建在 Spring Boot 之上,所以整合 Spring Security是最方便的方式。
-
在配置中心添加:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
-
在 配置中心目的 application.yml 中配置用戶名密碼:
spring: security: user: name: author password: 123
-
在配置中心客戶端的 bootstrap.yml 中:
spring: application: name: application cloud: config: profile: dev label: master uri: //localhost:3721/ username: author password: 123
-
直接訪問//localhost:3721/application/dev/master:
需要輸入用戶名、密碼才能就訪問
-
內部訪問:localhost:3722/cloud/url,可以訪問成功