@RefreshScope无法正常工作 - Spring Boot

时间:2017-07-17 06:43:51

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

我遵循这里描述的方法: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()。我能够在启动时加载属性,但我无法动态更新它们。谁能说出我做错了什么?如果不是制作这个配置类,我完全按照教程描述的一切正常工作但我无法适应我的用例。任何人都可以告诉我缺少什么吗?

2 个答案:

答案 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)

任何其他面临此问题的人,请确保以下内容:

  1. 您的控制器带有@RefreshScope
  2. 注释
  3. Spring启动执行器已添加到您的依赖项中,因为它实际上是提供这些端点的模块:

      

              org.springframework.boot           弹簧启动启动器执行器       

  4. 刷新端点已更新为:

    http:// {ip_address}:{端口} /执行器/刷新

  5. 刷新端点默认情况下未启用。您必须通过添加以下行在 bootstrap.properties 文件中明确启用它:

    management.endpoints.web.exposure.include=*

我已启用所有端点,而您也可以只启用特定端点。