【问题标题】:Quartz run job again N minutes after completedQuartz 在完成 N 分钟后再次运行作业
【发布时间】:2018-02-14 17:33:58
【问题描述】:

我有一些使用SimpleScheduleBuilder.repeatMinutelyForever(60) 的重复石英作业。假设该作业最初安排在上午 10:02,运行 5 分钟,在上午 10:07 完成。

现在它计划在上午 11:02 再次运行,但我希望它在完成后 60 分钟再次运行,因此它应该安排在上午 11:07。

有没有什么办法可以改变日程安排来做到这一点?还是应该使用一次性作业,每次完成时都会创建一个新作业?

【问题讨论】:

  • 您必须更新原始触发器。 IE。在您的作业的执行方法中,您需要查找和更新现有触发器。或者,您可以使用一些可以在完成后自动重新启动您的作业等的作业链接引擎。例如,QuartzDesk 作业链接引擎提供了此功能,它允许您从应用程序中外部化作业链接逻辑(注意:我有偏见这里)。见quartzdesk.com/documentation/features#job-chaining

标签: java quartz-scheduler


【解决方案1】:

使用 TriggerListener - 请参阅 here 了解 Quartz 食谱中的一些示例。

您将覆盖 triggerComplete 并在其中添加您的重新安排代码:

public void triggerComplete(Trigger trigger, JobExecutionContext context, CompletedExecutionInstruction triggerInstructionCode) {
    // check here the triggerInstructionCode value and reschedule your job
    super.triggerComplete(trigger, context, triggerInstructionCode);
}

向调度程序注册 TriggerListener 以监听特定触发器的示例:

scheduler.getListenerManager().addTriggerListener(myTriggerListener, keyEquals(triggerKey("myTriggerName", "myTriggerGroup")));

另见this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 2019-09-23
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多