我们在文件和数据库轮询中使用基于cron的触发器。有时我们想知道这是否是最后一次民意调查。这是春季整合中可用的东西吗?
答案 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()
......