我遵循这里描述的方法: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()
。我能够在启动时加载属性,但我无法动态更新它们。谁能说出我做错了什么?如果不是制作这个配置类,我完全按照教程描述的一切正常工作但我无法适应我的用例。任何人都可以告诉我缺少什么吗?
答案 0 :(得分:8)
请尝试使用@ConfigurationProperties。 e.g。
@ConfigurationProperties(prefix="config")
public class CloudConfig {
private Integer count;
public Integer count() {
return this.count;
}
public void setCount(Integer count) {
this.count = count;
}
}
reference doc from spring cloud州:
@RefreshScope(技术上)在@Configuration类上工作,但它 可能导致令人惊讶的行为:例如它并不意味着所有的 该类中定义的@Beans本身就是@RefreshScope。 具体来说,任何依赖于这些bean的东西都不能依赖它们 在启动刷新时更新,除非它本身在 @RefreshScope(将在刷新时重建它 重新注入依赖项,此时它们将被重新初始化 来自刷新的@Configuration)。
答案 1 :(得分:-1)
任何其他面临此问题的人,请确保以下内容:
@RefreshScope
Spring启动执行器已添加到您的依赖项中,因为它实际上是提供这些端点的模块:
org.springframework.boot 弹簧启动启动器执行器
刷新端点已更新为:
http:// {ip_address}:{端口} /执行器/刷新
刷新端点默认情况下未启用。您必须通过添加以下行在 bootstrap.properties 文件中明确启用它:
management.endpoints.web.exposure.include=*
我已启用所有端点,而您也可以只启用特定端点。