我环顾了很多,这是我的配置,如何动态更改轮询程序cron?与之类似,当应用程序运行时,我在数据库中更改了轮询程序cron,它应该由InboundChannelAdapter中的“轮询程序”来拾取。
注意:我不使用spring cloud config,所以@RefreshScope并不是一个选择
@Bean
@InboundChannelAdapter(channel = "sftpStreamChannel", poller = @Poller(cron = "${pollerCron}", maxMessagesPerPoll = "-1"))
public MessageSource<InputStream> sftpMessageSource()
{
SftpStreamingMessageSource source = new SftpStreamingMessageSource(template());
source.setRemoteDirectory(sftpRemoteDirectory);
source.setFilter(abSftpFileFilter());
return source;
}
答案 0 :(得分:1)
您不能动态更改cron表达式;该框架确实提供了DynamicPeriodicTrigger
,可用于在运行时更改固定延迟或固定汇率(但该更改要在下一次民意调查之后才能生效)。
您还可能会发现智能轮询器可能适合您的用例-请参见"Smart" Polling,在那里轮询器可以决定是否进行轮询。
您还可以创建自己的Trigger
来包装CronTrigger
并委托给它;那将允许您在运行时进行更改。但是,再次更改要等到下一次民意测验时才生效。