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

Exclusive batch jobs with javax.batch/jsr352

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

由于各种原因(例如"legacy code"),一些导入和导出是冲突的(您不能同时执行它们)。

我们正在调查 javax.batch。从概念上讲,它非常适合。但我们真正没能找到的是,以某种方式管理我们想要 运行.

的某些工作的 "exclusiveness" 的可能性。

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

更新

我所说的 "exclusiveness" 是指能够定义某些作业不能并行执行的能力。在最简单的情况下,这意味着 "only execute one an only one job at time"。在更复杂的情况下,更复杂的逻辑如 "job of type A can't run with other jobs of type A or B, but C is OK"。例如,"type of job" 是 jobXmlName here(不考虑作业参数)。

JSR-352(和 Spring Batch)都故意回避了编排的话题。这样做需要一种特殊的方法来阻止这些批处理框架提供的固有灵活性。因此,JSR-352 中的 JobOperator 没有任何防止一项工作 运行ning 而另一项工作 运行ning 的概念。

虽然您可以通过您自己的习惯JobOperator完成此操作,但我不推荐这种方法。相反,您最好将该层移动到更高的层,将其移动到调用 JobOperator 的任何人中,以便将这种类型的编排问题的逻辑与启动作业的实现细节分开。例如,如果您正在使用调度程序来启动作业,我会将关于哪些作业可以 运行 并行以及哪些作业不能...不是自定义 JobOperator 的逻辑放在那里。