石英作业限制

时间:2012-11-02 21:06:13

标签: concurrency quartz-scheduler jobs throttling

有点怀疑的要求:

我有一些石英作业充当数据收集器,在可用时从不同位置收集数据。然后我有另一个作业[数据加载]从收集器作业调用/触发以更新我的数据库。

我的要求是如何限制Load Job以使两个实例并行运行并处理来自收集器作业的工作

收集器工作1,2,... N>装载程序作业(两个实例)

作业程序部署在clusted Tomcat中。

两个问题: 1)当Loader作业的两个实例已在进行中时,如何让Collector作业等待?有没有办法使用石英程序来阻止FIFO逻辑来限制工作到Loader工作?如果一个人已经在等待处理,我也不希望收集器获取另一个数据。 2)有没有办法只用两个线程运行一个作业?一次不应超过两个实例?我的数据库表有限制,只能并行运行两个实例。

2 个答案:

答案 0 :(得分:0)

看来你这里有生产者 - 消费者的情况。 生产者和消费者通常由队列分隔。让您的收集器将项目放入(持久?)队列中,让您的Loader从队列中读取并分派最多2个处理线程。

答案 1 :(得分:0)

8 年过去了,这个问题在 google 搜索工作限制时显示为最高结果。虽然问题中的案例显然要求使用队列,但从未给出实际答案。

所以...要在石英中节流作业,必须使用 TriggerListener 并在 vetoJobExecution 中实现节流。作业本身也可以使用 @DisallowConcurrentExecution 进行注释以防止并发执行。

相关问题