我有一个使用Spring Cloud Config刷新其属性的Spring Boot应用程序。我可以轻松地使用@RefreshScope
刷新控制器,但不确定如何才能poller
重新启动Spring Integration作业。
我的integration-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>
答案 0 :(得分:1)
那么,方便的<poller>
本质上注册了Trigger
使用的TaskScheduler.schedule(Runnable task, Trigger trigger)
对象。
我建议您在PeriodicTrigger
的某个@Configuration
中注册@RefreshScope
bean,并在<poller>
定义中使用它,而不要使用fixed-rate
属性