如何在Spring集成中动态更改InboundChannelAdapter的轮询程序cron

时间:2018-09-13 12:49:03

标签: spring spring-integration spring-integration-sftp

我环顾了很多,这是我的配置,如何动态更改轮询程序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;
}

1 个答案:

答案 0 :(得分:1)

您不能动态更改cron表达式;该框架确实提供了DynamicPeriodicTrigger,可用于在运行时更改固定延迟或固定汇率(但该更改要在下一次民意调查之后才能生效)。

您还可能会发现智能轮询器可能适合您的用例-请参见"Smart" Polling,在那里轮询器可以决定是否进行轮询。

您还可以创建自己的Trigger来包装CronTrigger并委托给它;那将允许您在运行时进行更改。但是,再次更改要等到下一次民意测验时才生效。