在这个问题中,quartz
对repeatInterval
并不十分清楚:
如果方法花费的时间超过repeatInterval
会发生什么情况,即使当前方法没有完成,它是否会触发触发器?如果方法创建数据源对象,是否会导致连接池问题?
说该方法通常需要5
秒完成,但可能会飙升至10
秒,而repeatInterval
设置为8000
(8秒)
下次出现触发器会发生什么?我做了一些示例测试,看起来会在16th
秒内发生,因为第一次尝试8000
ms失败
它的工作方式是什么?是否会对服务器产生性能影响?
答案 0 :(得分:3)
如果方法执行时间超过指定的时间间隔,则将创建并同时运行作业的第二个实例。
您可以使用@DisallowConcurrentExecution注释对Job
实例进行注释,以防止多个作业实例同时运行。
@DisallowConcurrentExecution
public class TestJob implements Job {}
有了这个,进一步尝试的作业实例将排队,您必须注意,因为没有任何控制,无限数量的作业实例可能排队,这可能导致问题(如性能,竞争条件等) )。
对服务器有任何性能影响吗?
由于2个作业正在执行相同的操作,因此会影响性能,具体取决于您尝试执行的操作。
您可以找到调度的替代方案,也可以找到阻止并发执行的不同方法here。