【问题标题】:How to dynamically change the poller cron for InboundChannelAdapter in spring integration如何在 Spring 集成中动态更改 InboundChannelAdapter 的轮询 cron
【发布时间】:2018-09-13 12:49:02
【问题描述】:

我看了很多,这是我的配置,如何动态更改 poller cron?例如,当应用程序运行时,我更改了数据库中的 poller cron,它应该被 InboundChannelAdapter 中的 Poller 拾取。

注意:我不使用 spring 云配置,所以 @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;
}

【问题讨论】:

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


    【解决方案1】:

    您不能动态更改 cron 表达式;该框架确实提供了一个DynamicPeriodicTrigger,可用于在运行时更改固定延迟或固定速率(但更改要到下一次轮询才会生效)。

    您可能还会发现智能轮询器可能适合您的用例 - 请参阅 "Smart" Polling,其中轮询器可以决定是否继续进行轮询。

    您还可以创建自己的 Trigger 包装 CronTrigger 并委托给它;这将允许您在运行时更改它。但是,同样,更改要等到下一次投票后才会生效。

    【讨论】:

    • 您可以将CronTrigger 包裹在您自己的Trigger 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2013-12-31
    • 2015-10-27
    • 2014-12-06
    相关资源
    最近更新 更多