使用springcloud bus來動態刷新配置的時候,按照教程一步步執行下來,最后執行config-clinet客戶端接口 /bus/refresh的完畢,發現返回的配置屬性值沒有變化,一開始以為是瀏覽器緩存的問題,清緩存啥的折騰了一遍,沒效果。各種百度,看到網上說的要加 @RefreshScope注解啥的,還要配置
management: endpoints: web: exposure: include: bus-refresh
但是我發現這個是springboot 2.X之后的問題,我用的是springboot1.5x 為什么會出現問題呢,而且我用postman執行了/bus/refresh接口之后,能看到config-client服務下面打印出的日志,明顯能看到
Received remote refresh request. Keys refreshed [people.name, people.age] 確實已經獲取到刷新信息了,那為什么我請求接口還是沒有任何變化呢,后來嘗試加了
@RefreshScope注解之后,成功完成刷新。。。。
大概原因大概是這樣 :因為其他客戶接收到廣播后,會通過這個注解找屬性進行刷新值;歸根到底就是應用僅僅只是接收到廣播說“你該刷新了”,然后進行spring cloud的/refresh操作,然后通過@RefreshScope注解尋找對應屬性進行重新賦值
以上是我折騰了半天在某個評論中找到的解決辦法。。
@RefreshScope
@RestController
public class ConfigController {
@Value("${people.name}")
private String name;
@Value("${people.age}")
private Integer age;
@RequestMapping("/getPeople")
public String getPeople() {
return "姓名:"+this.name+" ; 年齡:"+age;
}
}