我们有一个应用程序可以执行大量的导入和导出 - 基本上在CSV文件和数据库表之间。
由于各种原因(例如“遗留代码”),某些导入和导出存在冲突(您无法同时执行)。
我们正在研究javax.batch
。从概念上讲,它非常适合。但我们真正找不到的是以某种方式管理我们想要经营的某些工作的“排他性”。
有人可以提供指针吗?我们如何使用javax.batch
实现独占批处理作业?或者我们应该为此实现我们自己的JobOperator
吗?
更新
我所说的“排他性”是指定义某些工作可能无法并行执行的能力。在最微不足道的情况下,这将意味着“只执行一个只有一个工作”。在更复杂的情况下,更复杂的逻辑,如“A类作业不能与A或B类型的其他作业一起运行,但C可以”。例如,“工作类型”是jobXmlName
here(无论工作参数如何)。
答案 0 :(得分:3)
JSR-352(和Spring Batch)都故意避免编排主题。要做到这一点,需要采用特定的方法来防止这些批处理框架提供的固有灵活性。因此,JSR-352中的JobOperator
没有任何阻止一个作业运行而另一个作业正在运行的概念。
虽然可以通过您自己的自定义JobOperator
完成此操作,但我不推荐这种做法。相反,您最好将那一层移动到更高的位置,而不是调用JobOperator
的任何人,以便将该类型的业务流程关注点的逻辑与启动作业的实现细节分开。例如,如果您正在使用调度程序来启动作业,那么我将逻辑放在哪些作业可以并行运行以及哪些作业不能...不在自定义JobOperator
中。