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

Posted

技术标签:

【中文标题】Spring Cloud Config Server 并在整个 Spring Boot 应用程序上应用 @RefreshScope【英文标题】:Spring Cloud Config Server and applying @RefreshScope on an entire Spring Boot application 【发布时间】:2019-01-19 15:23:21 【问题描述】:

我正在尝试使用 Spring Cloud Config Server 即时刷新应用程序范围内的属性。我正在将我的配置服务器与我的 Spring Boot 客户端应用程序一起嵌入,并且应用程序可以完美启动。

当我尝试更新属性时,例如: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 才能获取更新的值。

我的问题是:我怎样才能在整个应用程序范围内实现这一目标?或者对于这些用例中的每一个? :

@Values 贯穿我的代码, 我的jdbcTemplate 使用我的datasource <context:property-placeholder> 我的 Spring 集成工作 使用 log4j 记录

我正在使用:

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

【问题讨论】:

【参考方案1】:

@RefreshScope 需要重新创建 bean,然后从 Spring 环境中获取更新的值。另一种选择是使用@ConfigurationProperties bean,它会自动在/refresh 上重新绑定,而不使用@RefreshScope。没有选项可以自动生成所有 bean @RefreshScope

【讨论】:

以上是关于Spring Cloud Config Server 并在整个 Spring Boot 应用程序上应用 @RefreshScope的主要内容,如果未能解决你的问题,请参考以下文章

spring-cloud-starter-eureka-server 和 spring-cloud-starter-netflix-eureka-server的区别

spring-cloud-config:spring-cloud-config Maven配置错误

spring-cloud-config-server

无法通过 spring.cloud.config.enabled:false 禁用 Spring Cloud Config

0701-spring cloud config-简介Config Server开发Config Client开发

问题 spring-cloud-config 和 spring-cloud-bus