2

有点奇怪的要求:

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

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

收集器作业 1,2,...N > 加载器作业(两个实例)

作业程序部署在集群 Tomcat 中。

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

4

2 回答 2

1

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

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

于 2020-12-21T07:26:18.663 回答
0

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

于 2012-11-02T21:33:27.173 回答