Spring integration 如何判断这是否是spring integration cron触发器中的最后一次轮询?
我们在文件和数据库轮询中使用基于cron的触发器。有时我们想知道这是否是最后一次投票。这在spring integration中可用吗?我不知道您所说的“最后一次”-今天最后一次是什么意思 编写自定义版本的Spring integration 如何判断这是否是spring integration cron触发器中的最后一次轮询?,spring-integration,Spring Integration,我们在文件和数据库轮询中使用基于cron的触发器。有时我们想知道这是否是最后一次投票。这在spring integration中可用吗?我不知道您所说的“最后一次”-今天最后一次是什么意思 编写自定义版本的CronTrigger调用this.sequenceGenerator.next(…)并使用新结果再次查看下一次投票是否在明天进行并不困难 问题是如果发生这种情况,你想采取什么行动?仅仅知道它在触发器内部并没有多大帮助;我想你可以设置一个布尔值lastToday,然后在应用程序的其他地方测试它
CronTrigger
调用this.sequenceGenerator.next(…)
并使用新结果再次查看下一次投票是否在明天进行并不困难
问题是如果发生这种情况,你想采取什么行动?仅仅知道它在触发器内部并没有多大帮助;我想你可以设置一个布尔值lastToday
,然后在应用程序的其他地方测试它
Spring Integration 4.2(目前处于里程碑2)中,允许您在最后一次投票(如上所述)完成后采取一些行动。我不确定您所说的“最后一次”-今天最后一次是什么意思 编写自定义版本的
CronTrigger
调用this.sequenceGenerator.next(…)
并使用新结果再次查看下一次投票是否在明天进行并不困难
问题是如果发生这种情况,你想采取什么行动?仅仅知道它在触发器内部并没有多大帮助;我想你可以设置一个布尔值lastToday
,然后在应用程序的其他地方测试它
Spring Integration 4.2(目前处于里程碑2)提供了允许您在最后一次轮询(如上所述)完成后执行某些操作的功能。您只能通过自定义
触发器实现。例如,我们通常只在装配工上显示:
@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
从另一端,您可以为该事件配置
。您的Spring集成应用程序已经准备好对此做出反应了
对我来说,扩展CronTrigger
并为您的案例调用super.nextExecutionTime()
就足够了…您只能通过自定义触发器实现来实现这一点。例如,我们通常只在装配工上显示:
@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
从另一端,您可以为该事件配置
。您的Spring集成应用程序已经准备好对此做出反应了
对我来说,扩展CronTrigger
并调用super.nextExecutionTime()
就足以满足您的情况……我们有一个要求,即每天上午9点到下午2点每30秒轮询一次文件。如果当天没有收到文件,我们会在投票结束时向尊敬的客户发送电子邮件。所以,我们的想法是检查这是否是最后一次投票,我们仍然没有收到文件,然后发送电子邮件。一个更简单的解决方案是捕获每次处理文件的时间;然后,在下午2点检查最后一次,如果是昨天,发送电子邮件。谢谢Gary。我们目前正在这样做,但想看看是否有更好的解决方案。4.2条件轮询器的内容将有所帮助。我们有一个要求,即每天上午9点到下午2点每隔30秒轮询一次文件。如果当天没有收到文件,我们会在投票结束时向尊敬的客户发送电子邮件。所以,我们的想法是检查这是否是最后一次投票,我们仍然没有收到文件,然后发送电子邮件。一个更简单的解决方案是捕获每次处理文件的时间;然后,在下午2点检查最后一次,如果是昨天,发送电子邮件。谢谢Gary。我们目前正在这样做,但想看看是否有更好的解决方案。4.2条件轮询器的东西会有所帮助。