运行调度程序,以便在完成上一个作业后的一段时间内执行作业

时间:2016-10-03 06:47:04

标签: scheduled-tasks quartz-scheduler scheduler job-scheduling crontrigger

我需要创建调度程序以指定的时间间隔执行作业(类文件)。现在,我正在使用Quartz Scheduler,它会在触发作业时按照定义的时间间隔触发作业。

对于Eg:考虑我从早上9点开始每隔一小时给出一个cron表达式。我的第一次运行将是9,第二次运行将是10,依此类推。 如果我的工作需要20分钟才能执行,那么在这种情况下,这种方法效率不高。

我需要做的是从先前执行的工作完成时间开始每隔一小时安排一份工作

对于例如:考虑我的工作每小时运行一次是在9时触发,第一次运行需要20分钟才能运行,因此下次工作应该仅在10时触发: 20而不是10(即,从完成上一次工作后一小时)

我需要知道Quartz Scheduling中是否有任何方法可以实现这个或我需要做的任何其他逻辑。

如果有人可以帮我解决这个问题,那对我来说会非常有帮助。

1 个答案:

答案 0 :(得分:0)

您可以通过对作业执行的作业链来轻松实现此目的。您可以选择多种方法:

(1)实现一个Quartz JobListener并在其jobWasExecuted方法中,每当作业完成执行时由Quartz调用,重新启动你的工作。

(2)查看可用于实现简单作业链方案的Quartz JobChainingJobListener。请注意,此侦听器的功能非常有限,因为它不允许您在作业执行之间插入延迟,不支持在执行目标作业之前必须满足的条件等。但您可以将其用作良好的启动指向实施(1)。

(3)使用QuartzDesk(我们的商业产品)或任何其他允许您创建工作链的产品,同时外部化和管理应用程序的所有工作依赖 。作业链可以具有多个目标作业,这些作业可以立即执行,具有固定延迟或将来由JavaScript表达式生成的任意时间。它还允许您实现更复杂的工作流程,例如在多个源作业完成执行时触发目标作业等。我附上的屏幕截图显示了Job1的1分钟延迟重新执行Job1的简单作业链是什么完成(具有任何作业执行状态)如下所示:

Job Chain Condition Job Chain Target Jobs