确保Spring Quartz作业执行不重叠 [英] Ensure that Spring Quartz job execution doesn't overlap

查看:104
本文介绍了确保Spring Quartz作业执行不重叠的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Java程序,每20秒从Spring Qquartz执行一次。有时执行只需几秒钟,但随着数据变大,我确信它会运行20秒或更长时间。

I have a Java program that executes from Spring Qquartz every 20 seconds. Sometimes it takes just few seconds to execute, but as data gets bigger I'm sure it run for 20 seconds or more.

如何阻止Quartz触发/触发一个实例仍在执行时的工作?在数据库上执行2个执行相同操作的作业并不是那么好。有没有办法可以进行某种同步?

How can I prevent Quartz from firing/triggering the job while one instance is still being executed? Firing 2 jobs performing same operations on a database would not be so good. Is there a way I can do some kind of synchronization?

推荐答案

如果您需要做的就是每20秒触发一次,Quartz是严重的矫枉过正。 java.util.concurrent.ScheduledExecutorService 应该足以完成这项工作。

If all you need to do is fire every 20 seconds, Quartz is serious overkill. The java.util.concurrent.ScheduledExecutorService should be perfectly sufficient for that job.

ScheduledExecutorService 还为调度提供了两种语义。 固定费率将尝试每20秒运行一次作业而不管重叠,而固定延迟将尝试在第一个作业结束和下一个作业开始之间留出20秒。如果你想避免重叠,那么固定延迟是最安全的。

The ScheduledExecutorService also provides two semantics for scheduling. "fixed rate" will attempt to run your job every 20 seconds regardless of overlap, whereas "fixed delay" will attempt to leave 20 seconds between the end of the first job and the start of the next. If you want to avoid overlap, then fixed-delay is safest.

这篇关于确保Spring Quartz作业执行不重叠的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆