检测 RefreshScope 豆的刷新

2022-09-05 00:35:23

我的理解是,当您使用Spring Cloud的注释时,会注入数据的代理,如果支持信息发生变化,则代理会自动更新。遗憾的是,我需要找到一种方法在刷新发生时收到警报,以便我的代码可以从刷新范围的 Bean 中重新读取数据。RefreshScope

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


答案 1

EnvironmentChangeEvent在 中发生更改时触发。就Spring Cloud Config而言,这意味着当执行器端点被调用时,它会被触发。Environment/env

RefreshScopeRefreshedEvent在启动豆类刷新时触发,例如 调用执行器终结点。@RefreshScope/refresh

这意味着您需要像这样注册:ApplicationListener<RefreshScopeRefreshedEvent>

@Configuration
public class AppConfig {

    @EventListener(RefreshScopeRefreshedEvent.class)
    public void onRefresh(RefreshScopeRefreshedEvent event) {
        // Your code goes here...
    }

}

答案 2

当刷新发生时,将在您的配置客户端中引发,如文档所述:EnvironmentChangeEvent

应用程序将侦听 以几种标准方式对更改做出反应(用户可以以正常方式将其他 s 添加为 s)。EnvironmentChangedEventApplicationListener@Bean

因此,您可以为此事件定义事件侦听器:

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

推荐