【问题标题】:Exclusive batch jobs with javax.batch/jsr352使用 java.batch/jsr 352 的独占批处理作业
【发布时间】:2015-04-27 14:58:29
【问题描述】:

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

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

我们正在调查javax.batch。从概念上讲,它非常适合。但我们真正未能找到的是以某种方式管理我们想要运行的某些工作的“排他性”的可能性。

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

更新

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

【问题讨论】:

  • 你能多描述一下“排他性”是什么意思吗?
  • @MichaelMinella 嗨,迈克尔,请查看更新。非常感谢您的洞察力。

标签: java quartz-scheduler spring-batch jsr352


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多