cron工作是否重叠?

时间:2015-06-18 11:28:53

标签: java cron quartz-scheduler

我使用这种模式每30秒执行一次cron Quartz触发器作业:

0/30 * * * * ?

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

在某个地方,我已经读过你可以编写一个模式来在前一个过程完成后启动cron触发器n秒,但找不到以这种方式编程我的工作的确切答案。

2 个答案:

答案 0 :(得分:1)

您可能需要的是有状态的工作实施。您需要实现StatefulJob界面而不是Job

在文档中说

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

您可以在此链接http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/TutorialLesson03

找到有关它的更多详细信息

答案 1 :(得分:1)

StatefulJob可能是我需要的Job,但根据thisthis的答案,正确解决此问题的方法是:

Quartz 2

在Quartz 2.0版中,不推荐使用StatefulJob。现在建议使用注释:

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

说明:

  

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