如何使用@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
属性.
我有一个 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
属性.