Spring Cloud Config Server并在整个Spring Boot应用程序上应用@RefreshScope

时间:2018-08-12 21:50:28

标签: spring-boot spring-integration spring-cloud spring-boot-actuator spring-cloud-config

我正在尝试使用Spring Cloud Config Server即时刷新应用程序范围内的属性。我将Config Server嵌入到Spring Boot Client应用程序中,并且该应用程序完美启动。

当我尝试更新属性时,例如:spring.datasource.url,然后我发送POST请求刷新执行器:http://localhost:9190/management/refresh,我得到了预期的结果:

[
   "spring.datasource.url"
]

我还创建了一个用于测试目的的控制器:

@Value("${spring.datasource.url}")
private String message;

@RequestMapping("/message")
String getMessage() {
    return this.message;
}

但是,当我在http://localhost:9290/message上按下此控制器时,我仍在获得${spring.datasource.url}的旧未刷新值。

我必须在控制器的类上显式添加一个@RefreshScope才能获取更新的值。

我的问题是:如何在整个应用程序范围内实现?还是对于每个用例? :

    在我的整个代码中
  • @Value s
  • 使用我的jdbcTemplate的我的datasource
  • <context:property-placeholder>做我的春季整合工作
  • 使用log4j记录

我正在使用:

<spring-cloud.version>Edgware.SR1</spring-cloud.version>
<spring-boot-version>1.5.9.RELEASE</spring-boot-version>

1 个答案:

答案 0 :(得分:2)

需要

@RefreshScope来重新创建Bean,然后从Spring Environment获取更新的值。另一种选择是使用@ConfigurationProperties个bean,它们自动在/refresh上重新绑定,而无需使用@RefreshScope。没有选项可以自动使所有bean @RefreshScope