啟動config-server,啟動成功后就不需要在管了;
在config-client做些修改:
在使用的controller或service的類上加上一個注解@RefreshScope
在pom中加入依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
至此,准備工作完畢
接下來修改配置文件中的屬性值,
無需重啟congif-server,他會自動更新值;
接下來調用config-client的refresh方法,
curl -X POST http://127.0.0.1:9020/refresh
在config-client控制台會有日志刷新,大意思是重新連接config-server,刷新取值;接下來就可以驗證結果,期間無需重啟服務;
{
"timestamp": 1545295648687,
"status": 401,
"error": "Unauthorized",
"message": "Full authentication is required to access this resource",
"path": "/refresh"
}
需要加上配置:
management.security.enabled: false
方法調用成功后,會返回修改的記錄
此方法不需要重啟應用服務,可以實現配置的手動刷新,
倘若,一個服務有多個節點,此方法必須要依次刷新服務。
配置的批量刷新
借助MQ可以實現一次方法調用,實現整個服務的配置刷新
首先安裝或使用已經有的rabbitmq,
安裝rabbitmq:https://www.cnblogs.com/chenglc/p/10154444.html
在應用服務的配置中加上rabbitmq的配置:
spring: rabbitmq: host: localhost port: 5672 username: guest password: guest
還需要加入依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
啟動項目后,控制台的日志輸出會有這樣一行:
2018-12-21 16:05:26.747 INFO 11377 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/bus/refresh],methods=[POST]}" onto public void org.springframework.cloud.bus.endpoint.RefreshBusEndpoint.refresh(java.lang.String)
就是調用此方法:
127.0.0.1:9020/bus/refresh
就可以實現一次性刷新整個服務;
建議:在config-server中加入一樣的配置,每次更新配置文件后,讓config-server來擔任通知方
存在的問題:如果調用127.0.0.1:9020/bus/refresh,此地址來刷新服務,則127.0.0.2:9020,節點也不會做通知,不會更新服務的配置信息
到此,實現了配置的半自動更新;
配置的全自動更新
要做到配置信息的自動更新,只差一步,那就是修改配置文件后,自動調用刷新方法
這只需要在github、gitlab或碼雲上做配置即可:
以碼雲為例:
到此就可以實現,配置的自動刷新