问题描述
尝试改用@ConfigurationProperties。例如
@ConfigurationProperties(prefix="config")
public class CloudConfig {
private Integer count;
public Integer count() {
return this.count;
}
public void setCount(Integer count) {
this.count = count;
}
}
Spring Cloud的参考文档指出:
@RefreshScope(在技术上)在@Configuration类上工作,但可能导致令人惊讶的行为:例如,这并不意味着该类中定义的所有@Beans本身都是@RefreshScope。具体来说,依赖于这些bean的任何东西都不能依赖于刷新启动时对其进行更新,除非它本身在@RefreshScope中(在刷新中将其重建并重新注入其依赖项,此时它们将被刷新)从刷新的@Configuration重新初始化)。
解决方法
我正在按照这里描述的方法进行操作:https : //github.com/jeroenbellen/blog-manage-and-reload-
spring-properties,唯一的区别是在我的情况下,这些属性正在多个类中使用,所以我有将它们全部放在一个实用程序类中CloudConfig
,我使用getter引用其变量。这是该类的样子:
@Configuration
@RefreshScope
public class CloudConfig {
static volatile int count; // 20 sec
@Value("${config.count}")
public void setCount(int count) {
this.count = count;
}
public static int getCount() {
return count;
}
}
我count
在类似的其他类中使用该变量CloudConfig.getCount()
。我可以在启动时很好地加载属性,但无法动态更新它们。谁能告诉我我做错了吗?如果不是制作该配置类,而是按照本教程描述的那样做就可以了,那么一切都可以正常工作,但是我很难适应它的用例。谁能告诉我我所缺少的吗?