Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration 如何判断这是否是spring integration cron触发器中的最后一次轮询?_Spring Integration - Fatal编程技术网

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

Spring integration 如何判断这是否是spring integration cron触发器中的最后一次轮询?,spring-integration,Spring Integration,我们在文件和数据库轮询中使用基于cron的触发器。有时我们想知道这是否是最后一次投票。这在spring integration中可用吗?我不知道您所说的“最后一次”-今天最后一次是什么意思 编写自定义版本的CronTrigger调用this.sequenceGenerator.next(…)并使用新结果再次查看下一次投票是否在明天进行并不困难 问题是如果发生这种情况,你想采取什么行动?仅仅知道它在触发器内部并没有多大帮助;我想你可以设置一个布尔值lastToday,然后在应用程序的其他地方测试它

我们在文件和数据库轮询中使用基于cron的触发器。有时我们想知道这是否是最后一次投票。这在spring integration中可用吗?

我不知道您所说的“最后一次”-今天最后一次是什么意思

编写自定义版本的
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条件轮询器的东西会有所帮助。