【问题标题】:Spring Integration : get poll expression from databaseSpring Integration:从数据库中获取投票表达式
【发布时间】:2018-11-05 10:46:24
【问题描述】:

我有一个 FTP 消息源,我想让用户通过应用程序配置轮询频率。

这是入站通道适配器的当前配置

@Bean
@InboundChannelAdapter(channel = "fromSmartpath", poller = @Poller(cron = "0 15 8 ? * MON,TUE,WED,THU,FRI,SAT"))
public MessageSource<File> sftpMessageSource() throws SftpException {
    SftpInboundFileSynchronizingMessageSource source = new SftpInboundFileSynchronizingMessageSource(
            sftpInboundFileSynchronizer());
    source.setLocalDirectory(new File(Constants.LOCAL_REPOSITORY_PATH));
    source.setAutoCreateLocalDirectory(true);
    source.setLocalFilter(new FileSystemPersistentAcceptOnceFileListFilter(metaDataStore(), "metastore"));
    return source;
}

我的目标是从数据库中检索 cron 表达式。有没有办法做到这一点?

谢谢

【问题讨论】:

    标签: ftp spring-integration poller


    【解决方案1】:

    cron 表达式以CronTrigger 结尾。您可以开发一些服务,在其afterPropertiesSet() 中从 DB 中选择一个表达式并通过 getter 返回它。 然后为CronTrigger 声明一个@Bean,并在定义期间从服务中调用该getter。

    @InboundChannelAdapter 上的 @Poller 有一个 trigger 选项来引用现有的 bean。

    【讨论】:

    • 感谢您的回复。 @Polller 确实有一个触发选项,但它接受一个字符串而不是一个 bean。该字符串必须是一个常量,因此定义从数据库获取 cron 表达式的方法的可能性也不起作用
    • 什么? `trigger` 选项是一个 bean 引用。表示 bean 名称。完全不确定你不清楚什么。您为CronTrigger 创建一个@Bean 并在该选项中使用其名称。当然注解不能引用对象。这不是他们的工作方式......
    • 好吧这很尴尬(执行我的新手)。这对我有用。如果可以的话,另一个问题是,当用户更改数据库中的 cron 表达式时,我如何重新加载 InboundChannelAdapter 以获取新的 cron 值
    • 您只能通过自定义触发器实现来实现这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多