2016-02-10 40 views
3

我的理解是,当您使用Spring Cloud的RefreshScope注释时,会向数据的代理注入数据,并且如果更改了后备信息,代理会自动更新。不幸的是,我需要找到刷新时发出警报的方式,以便我的代码可以重新读取刷新范围bean中的数据。检测RefreshScope bean的刷新

简单示例:计划存储在云配置中的计划任务。除非您等到下次执行任务(可能需要一段时间)或定期轮询配置(这似乎很浪费),否则无法知道配置是否已更改。

回答

7

当刷新时EnvironmentChangeEvent会在你的配置客户端待提高,如文档指出:

应用程序将监听的EnvironmentChangedEvent和反应 在一对夫妇的标准方法的变化(附加 ApplicationListener s可由用户以正常 的方式添加为@Bean)。

所以,你可以定义的事件侦听此事件:

public class YourEventListener implements ApplicationListener<EnvironmentChangeEvent> { 
    @Override 
    public void onApplicationEvent(EnvironmentChangeEvent event) { 
     // do stuff 
    } 
} 
+1

工作。谢谢! –

+1

EnvironmentChangedEvent在启动时也被调用,这对我来说是毁了东西 – user2798694

+0

@ user2798694'event.getSource()'会给你事件最初发生的对象。也许通过检查源可以过滤掉启动事件 –

0

我想到一个办法可以与@RefreshScope注释所有的bean有由配置外部化和@Value ("${your.prop.key}")注释中注释性质。

这些属性在配置上更改时更新。