【问题标题】:Do cron jobs overlap? [duplicate]cron作业是否重叠? [复制]
【发布时间】:2015-06-18 20:16:12
【问题描述】:

我有一个使用此模式每 30 秒执行一次的 cron Quartz 触发器作业:

0/30 * * * * ?

在这种模式下,如果我的作业花费超过 30 秒来完成执行,是否会触发下一个进程并与第一个进程重叠?

在某处我读到您可以编写一个模式以在上一个进程完成后启动 cron 触发器 n 秒,但无法找到以这种方式编写我的工作的确切答案。

【问题讨论】:

  • 我没有使用石英,但在春季,“固定速率”和“cron”类型可以重叠,而“固定延迟”则不能。 Quartz 很可能以同样的方式工作。
  • 这里重要的不是 cron,如果它们允许同时运行作业,它是触发器(或作业)。
  • @Tom 这就是我在问题结束时提出的问题以及您在此处的答案和重复问题中可以看到的内容...看不到您评论的重点...

标签: java cron quartz-scheduler


【解决方案1】:

您可能需要的是有状态的作业实施。你需要实现StatefulJob接口而不是Job

在它说的文档中

如果作业是有状态的,并且触发器尝试在作业已经执行时“触发”该作业,触发器将阻塞(等待)直到前一次执行完成。

您可以在此链接http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/TutorialLesson03找到更多详细信息

【讨论】:

    【解决方案2】:

    StatefulJob 可能是我需要的Job,但根据thisthis 的答案,面对这个问题的正确方法是:

    石英 2

    在 Quartz 2.0 版本中,StatefulJob 已被弃用。现在建议改用注解:

    @DisallowConcurrentExecution
    public class YourJob implements org.quartz.Job {
        void execute(JobExecutionContext context) {/*implementation omitted*/}
    }
    

    解释:

    @DisallowConcurrentExecution: 不允许作业的多个实例同时运行(考虑一个作业在其 execute() 方法中的代码需要 34 秒才能运行的情况,但它被安排了一个重复的触发器每 30 秒)。

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 2013-07-18
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多