使用javax.batch / jsr352进行独家批处理作业

时间:2015-04-27 14:58:30

标签: java quartz-scheduler spring-batch jsr352

我们有一个应用程序可以执行大量的导入和导出 - 基本上在CSV文件和数据库表之间。

由于各种原因(例如“遗留代码”),某些导入和导出存在冲突(您无法同时执行)。

我们正在研究javax.batch。从概念上讲,它非常适合。但我们真正找不到的是以某种方式管理我们想要经营的某些工作的“排他性”。

有人可以提供指针吗?我们如何使用javax.batch实现独占批处理作业?或者我们应该为此实现我们自己的JobOperator吗?

更新

我所说的“排他性”是指定义某些工作可能无法并行执行的能力。在最微不足道的情况下,这将意味着“只执行一个只有一个工作”。在更复杂的情况下,更复杂的逻辑,如“A类作业不能与A或B类型的其他作业一起运行,但C可以”。例如,“工作类型”是jobXmlName here(无论工作参数如何)。

1 个答案:

答案 0 :(得分:3)

JSR-352(和Spring Batch)都故意避免编排主题。要做到这一点,需要采用特定的方法来防止这些批处理框架提供的固有灵活性。因此,JSR-352中的JobOperator没有任何阻止一个作业运行而另一个作业正在运行的概念。

虽然可以通过您自己的自定义JobOperator完成此操作,但我不推荐这种做法。相反,您最好将那一层移动到更高的位置,而不是调用JobOperator的任何人,以便将该类型的业务流程关注点的逻辑与启动作业的实现细节分开。例如,如果您正在使用调度程序来启动作业,那么我将逻辑放在哪些作业可以并行运行以及哪些作业不能...不在自定义JobOperator中。