Spring Boot配置动态刷新教程

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,配置完毕

你可能感兴趣的:(Spring Boot配置动态刷新教程)