我有一个 Java 程序,每 20 秒从 Spring Qquartz 执行一次。有时只需要几秒钟即可执行,但随着数据变大,我确信它会运行 20 秒或更长时间。
当一个实例仍在执行时,如何防止 Quartz 触发/触发作业?解雇两个在数据库上执行相同操作的作业不太好。有什么办法可以进行某种同步吗?
Quartz 1
如果你改变你的类来实现 StatefulJob 而不是 Job,Quartz 会为你处理这个问题。来自StatefulJob javadoc http://www.quartz-scheduler.org/api/2.2.1/index.html:
有状态作业不允许
并发执行,这意味着新的
之前发生的触发器
完成execute(xx)方法
会被延迟。
StatefulJob 扩展了 Job 并且不添加任何新方法,因此要获得所需的行为,您所需要做的就是更改以下内容:
public class YourJob implements org.quartz.Job {
void execute(JobExecutionContext context) {/*implementation omitted*/}
}
To this:
public class YourJob implements org.quartz.StatefulJob {
void execute(JobExecutionContext context) {/*implementation omitted*/}
}
Quartz 2
在 Quartz 2.0 版本中,StatefulJob
已弃用。现在建议改用注释,例如
@DisallowConcurrentExecution
public class YourJob implements org.quartz.Job {
void execute(JobExecutionContext context) {/*implementation omitted*/}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)