弹簧石英间隔:如果方法需要更长时间再重复间隔会发生什么?

时间:2016-10-07 14:20:14

标签: java spring quartz-scheduler

在这个问题中,quartzrepeatInterval并不十分清楚:

如果方法花费的时间超过repeatInterval会发生什么情况,即使当前方法没有完成,它是否会触发触发器?如果方法创建数据源对象,是否会导致连接池问题?

说该方法通常需要5秒完成,但可能会飙升至10秒,而repeatInterval设置为8000(8秒)

下次出现触发器会发生什么?我做了一些示例测试,看起来会在16th秒内发生,因为第一次尝试8000 ms失败

它的工作方式是什么?是否会对服务器产生性能影响?

1 个答案:

答案 0 :(得分:3)

如果方法执行时间超过指定的时间间隔,则将创建并同时运行作业的第二个实例。

您可以使用@DisallowConcurrentExecution注释对Job实例进行注释,以防止多个作业实例同时运行。

@DisallowConcurrentExecution
public class TestJob implements Job {}

有了这个,进一步尝试的作业实例将排队,您必须注意,因为没有任何控制,无限数量的作业实例可能排队,这可能导致问题(如性能,竞争条件等) )。

  

对服务器有任何性能影响吗?

由于2个作业正在执行相同的操作,因此会影响性能,具体取决于您尝试执行的操作。

您可以找到调度的替代方案,也可以找到阻止并发执行的不同方法here