SpringCloud
全家桶中的分布式配置中心SpringCloudConfig
, 它使用git
來管理配置文件, 在修改配置文件后只需要調用一個接口就可以讓新配置生效, 非常方便.
SpringCloudConfig分為兩部分, 服務端和客戶端, 服務端是用來提供
配置文件信息的, 而客戶端是用來使用
配置文件信息的, 我們接下來就開始集成.
一、SpringCloudConfig服務端
1. 新建一個Module
2. 選擇springboot工程
3. 起個名字
4. 選擇配置中心服務端
5. 選擇注冊中心客戶端
6. 配置application.properties文件
# 服務端口 server.port = 8088 # 填寫注冊中心服務器地址 eureka.client.service-url.defaultZone = http://localhost:8081/eureka
# 注冊配置中心別名 spring.application.name = service-config # 配置存儲地址(git) spring.cloud.config.server.git.uri = https://gitee.com/XXX/spring-cloud-config
# 存儲文件夾 spring.cloud.config.server.git.search-paths = myconfig # git主分支 spring.cloud.config.label = master
7. 配置service-config啟動文件
// 開啟注冊中心客戶端
@EnableEurekaClient // 開啟配置中心服務器
@EnableConfigServer
二、git倉操作
1. 新建git倉
填寫信息
2. 新建文件夾
命名文件夾
3. 新建文件
寫入信息
文件的命名是有規范的, [服務名稱-環境. properties]否則你的服務器無法讀取配置文件, 我們來查看一下service-a
的配置文件名稱
所以我們的配置文件應該叫
service-objcat-a-dev. properties
三、啟動服務訪問
http://localhost:8088/service-objcat-a-dev.properties
http://localhost:8088/service-objcat-a-dis.yml
運行無問題
四、SpringCloudConfig服務端
給service-a
開啟分布式配置服務
1. 首先在service-a的pom
中添加依賴
<!-- 分布式配置中心客戶端依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
2. 修改配置文件
把application.yml
修改成bootstrap.yml
這里說一下, 這兩個名字都是應用的配置文件, 但是bootstrap.yml
會先執行, 其次是配置分布式配置中心服務器的規范就是在bootstrap.yml
中配置的, 這倆個配置文件可以共存, 這里為了方便起見, 所以直接就改名了, 我們繼續
# 分布式配置中心 cloud: config: profile: dev discovery: enabled: true service-id: service-config
注意別名一定要跟你上面配置服務器的名稱一致, profile
千萬不要亂寫, 寫你需要應用配置文件的環境, 還記得我們的配置文件命名方式嗎 [服務名-環境.yml
]
3. 到這里已經配置完成了, 我們來寫個接口驗證一下吧!
@Value("${name}") private String name; @RequestMapping("/hello") public String hello() { return name; }
@value
就是從配置文件中讀取一個字段, 我們name
這個字段是存在服務端的, 所以如果可以讀取出來, 就證明分布式配置中心是可以用的, 之后我們來運行一下服務
訪問接口
4. 動態更改
現在我們的配置文件還不能做到遠程動態更改, 我們接下來要做的就是線上刷新字段, 不需要重啟服務器, 我們首先給service-a
導入監控模塊
的包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
5. 修改配置文件, 在配置文件中增加如下字段 暴露所有endpoints
management:
endpoints:
web:
exposure:
include: "*"
6. 在控制器中配置刷新注解@RefreshScope, 只有配置過刷新注解的控制器中的值才會被刷新.
7. 重啟服務
8. 修改git上的配置信息
9. 再次訪問, 發現沒有任何變化
10. 這里需要調用一個刷新接口即可, 注意一定要使用post
請求, 可以使用命令行或者postman
.
命令行:
curl -X POST http://localhost:8082/actuator/refresh
postman:
http://localhost:8082/actuator/refresh
11. 再次訪問接口, 成功