Spring Boot Config為配置提供了集中化的管理,所以當(dāng)配置改變的時候我們應(yīng)該能夠通知到所有的客戶端,那么這是如何做到的呢
Spring提供了@ConfigurationProperties注解,可以將配置屬性映射到一個JavaBean
而且Spring Boot為每個Client導(dǎo)出了一個/refresh的服務(wù),每當(dāng)調(diào)用這個服務(wù)的時候,被@ConfigurationProperties標(biāo)注的Bean就會刷新屬性值
我們繼續(xù)使用在http://www.itdecent.cn/p/6a231e40a075和http://www.itdecent.cn/p/b7bcab472d1e中配置的項目
下面我們把message提出成為一個JavaBean
@ConfigurationProperties(prefix = "")
@Configuration
public class MessageConfig {
private volatile String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
@ConfigurationProperties注解可以配置前綴,如果message屬性改為test.message,@ConfigurationProperties注解就可以寫為@ConfigurationProperties(prefix = "test")
在bootstrap.properties文件中增加一行配置
management.security.enabled=false
這行配置可以免去調(diào)用/refresh時的權(quán)限驗證
將RonnieController改成下面這樣
@RestController
class RonnieController {
@Autowired
MessageConfig messageConfig;
@RequestMapping("/message")
public String message() {
return messageConfig.getMessage();
}
}
重啟服務(wù),驗證是否能正常執(zhí)行,訪問http://localhost:8080/message,如果返回I'm a king,則沒有問題
然后我們修改ronnie.properties文件,在king后面加上er,變?yōu)?code>I'm a kinger,然后提交到git
curl -X POST http://localhost:8080/refresh刷新配置,注意要用POST請求,刷新成功后,再次訪問http://localhost:8080/message,此時返回I'm a kinger
ok,配置完畢