如何判断这是否是Spring集成cron触发器中的最后一次轮询?

时间:2015-07-30 11:56:23

标签: spring-integration

我们在文件和数据库轮询中使用基于cron的触发器。有时我们想知道这是否是最后一次民意调查。这是春季整合中可用的东西吗?

2 个答案:

答案 0 :(得分:0)

我不确定你的意思"最后" - 今天上午?

编写CronTrigger的自定义版本再次使用新结果再次调用this.sequenceGenerator.next(...)以确定明天是否会进行下一次投票时,并不难。

问题是,如果发生这种情况,您真的想采取什么行动?只知道它在触发器内部并没有多大帮助;我想你可以设置一个布尔lastToday并在你的应用程序的其他地方测试它。

Spring Integration 4.2(目前在里程碑2)有conditional pollers,允许您在最后一次轮询(如上所述)完成后采取一些行动。

答案 1 :(得分:0)

您只能从自定义Trigger实施中执行此操作。例如,我们经常会显示OnlyOnceTrigger

@Bean
public Trigger onlyOnceTrigger() {
    return new Trigger() {

        private final AtomicBoolean invoked = new AtomicBoolean();

        @Override
        public Date nextExecutionTime(TriggerContext triggerContext) {
            return this.invoked.getAndSet(true) ? null : new Date();
        }
    };
}

您可以将ApplicationEventPublisher注入您的版本,如果要结束触发(下一个日期为null),您可以发出一些自定义ApplicationEvent

从另一方面,您为该事件配置<int-event:inbound-channel-adapter>。您的Spring Integration应用程序已准备就此做出反应!

对我来说似乎足以扩展CronTrigger并为你的案件调用super.nextExecutionTime() ......