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 才能获取更新的值。
我的问题是:我怎样才能在整个应用程序范围内实现这一目标?或者对于这些用例中的每一个? :
@Value
s 贯穿我的代码,
我的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.enabled:false 禁用 Spring Cloud Config