如何使用@RefreshScope 刷新 spring 集成轮询器?

How to refresh spring integration poller with @RefreshScope?

我有一个 Spring 启动应用程序,它使用 Spring Cloud Config 来刷新其属性。我可以使用 @RefreshScope 轻松刷新我的控制器,但我不确定如何为我的 poller 做同样的事情来重新启动我的 Spring 集成工作。

我的积分-config.xml :

<context:property-placeholder location="file:///C:/workspace/config/tasky-dev.properties" />

<int:inbound-channel-adapter ref="tasksService" method="requestAllTasks" channel="initTimestampChannel">
    <int:poller fixed-rate="${start.task.rate}"></int:poller>
</int:inbound-channel-adapter>

如果我更改 start.task.rate,然后点击 /refresh,执行器会检测到更改,但我的 poller 没有接收到任何信息。有什么办法可以为它定义某种 @RefreshScope 吗?

我的 tasky-dev.properties :

start.task.rate=600000

我的 Application.java :

@SpringBootApplication
@EnableConfigServer
@ImportResource("classpath:integration-config.xml")
@EnableSwagger2
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

=======

更新:

通过设置 PeriodicTrigger 尝试 Artem 的解决方案。范围被刷新,但仅当轮询器被召回时(一旦 fixedRate 持续时间已过):

@RefreshScope
@Bean
public PeriodicTrigger refreshablePeriodicTrigger() {
    PeriodicTrigger periodicTrigger = new PeriodicTrigger(fixedRate);
    periodicTrigger.setFixedRate(true);
    return periodicTrigger;
}

并且:

<int:inbound-channel-adapter ref="tasksService" method="requestAllTasks" channel="initTimestampChannel">
    <int:poller trigger="refreshablePeriodicTrigger"></int:poller>
</int:inbound-channel-adapter>

好吧,那个方便的 <poller> 本质上注册了一个 Trigger 对象,供 TaskScheduler.schedule(Runnable task, Trigger trigger) 使用。

我可以建议你在一些 @Configuration 中使用 @RefreshScope 注册一个 PeriodicTrigger bean 并在 <poller> 定义中使用它而不是 fixed-rate 属性.