Spring Boot Config为配置提供了集中化的管理,所以当配置改变的时候我们应该能够通知到所有的客户端,那么这是如何做到的呢
Spring提供了@ConfigurationProperties
注解,可以将配置属性映射到一个JavaBean
而且Spring Boot为每个Client导出了一个/refresh
的服务,每当调用这个服务的时候,被@ConfigurationProperties
标注的Bean就会刷新属性值
我们继续使用在http://www.jianshu.com/p/6a231e40a075和http://www.jianshu.com/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
这行配置可以免去调用/refresh
时的权限验证
将RonnieController
改成下面这样
@RestController
class RonnieController {
@Autowired
MessageConfig messageConfig;
@RequestMapping("/message")
public String message() {
return messageConfig.getMessage();
}
}
重启服务,验证是否能正常执行,访问http://localhost:8080/message,如果返回I'm a king
,则没有问题
然后我们修改ronnie.properties
文件,在king后面加上er,变为I'm a kinger
,然后提交到git
curl -X POST http://localhost:8080/refresh
刷新配置,注意要用POST请求,刷新成功后,再次访问http://localhost:8080/message,此时返回I'm a kinger
ok,配置完毕
网友评论