运行 调度程序在上一个作业完成后每隔一段时间执行作业

Run scheduler to execute jobs at an interval from the completion of the previous job

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

例如: 假设我从早上 9.My 首先 运行 开始每隔一小时给 运行 一个 cron 表达式将在 9 点,我的第二个 运行 将在 10 点,依此类推。 如果我的工作需要 20 分钟才能执行,那么这种方法就没有那么有效了。

我需要做的是从之前运行个工作

的完成时间开始每隔一小时安排一个工作

例如: 考虑我的工作 运行 每隔一小时在 9 点触发,第一个 运行 需要 20 分钟才能 运行,所以下一次作业应该只在 10:20 而不是 10 触发(即,从上一个 运行 作业完成后一小时)

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

如果有人能帮我解决这个问题,那对我很有帮助。

您可以通过 job-chaining 您的作业执行轻松实现这一目标。您可以选择多种方法:

(1) 实现一个 Quartz JobListener 并在其 jobWasExecuted 方法中,只要作业完成执行,Quartz 就会调用该方法,re-fire 你的作业。

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

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