javax.batch/jsr352的独占批处理作业
我们有一个执行大量导入和导出的应用程序,基本上是在CSV文件和数据库表之间 由于各种原因(如“遗留代码”),一些导入和导出是冲突的(您不能同时执行它们) 我们正在研究javax.batch/jsr352的独占批处理作业,java,quartz-scheduler,spring-batch,jsr352,Java,Quartz Scheduler,Spring Batch,Jsr352,我们有一个执行大量导入和导出的应用程序,基本上是在CSV文件和数据库表之间 由于各种原因(如“遗留代码”),一些导入和导出是冲突的(您不能同时执行它们) 我们正在研究javax.batch。从概念上讲,它非常适合。但我们真正没有发现的是,有可能以某种方式管理我们想要经营的某些工作的“排他性” 有人能提供一个关于这个的指针吗?我们如何使用javax.batch实现独占批处理作业?或者我们应该为此实现自己的JobOperator 更新 我所说的“排他性”是指能够定义某些工作不能并行执行的能力。在最简
javax.batch
。从概念上讲,它非常适合。但我们真正没有发现的是,有可能以某种方式管理我们想要经营的某些工作的“排他性”
有人能提供一个关于这个的指针吗?我们如何使用javax.batch
实现独占批处理作业?或者我们应该为此实现自己的JobOperator
更新
我所说的“排他性”是指能够定义某些工作不能并行执行的能力。在最简单的情况下,这意味着“一次只执行一个作业”。在更复杂的情况下,更复杂的逻辑,如“类型A的作业不能与其他类型A或B的作业一起运行,但C是可以的”。例如,“作业类型”是jobXmlName
(与作业参数无关)。JSR-352(和springbatch)都有意避免编排主题。要做到这一点,需要一种特殊的方法来防止这些批处理框架提供的固有灵活性。因此,JSR-352中的JobOperator
没有任何防止一个作业在另一个作业运行时运行的概念
虽然您可以通过自己定制的JobOperator
实现这一点,但我不推荐这种方法。相反,您最好将这一层移到更高的位置,进入调用JobOperator
的人,以便将该类型编排关注点的逻辑与启动作业的实现细节分离。例如,如果您使用调度程序来启动作业,我会将逻辑放在那里,以确定哪些作业可以并行运行,哪些作业不能…而不是放在自定义的作业操作符中JobOperator
没有任何防止一个作业在另一个作业运行时运行的概念
虽然您可以通过自己定制的JobOperator
实现这一点,但我不推荐这种方法。相反,您最好将这一层移到更高的位置,进入调用JobOperator
的人,以便将该类型编排关注点的逻辑与启动作业的实现细节分离。例如,如果您使用调度程序来启动作业,我会将逻辑放在那里,以确定哪些作业可以并行运行,哪些作业不能…而不是在自定义的作业操作符中
您能更详细地描述一下“排他性”是什么意思吗?@MichaelMinella Hi Michael,请查看更新。我很感激你的洞察力。你能更详细地描述一下你所说的“排他性”是什么意思吗?@MichaelMinella嗨,迈克尔,请看更新。我很感激你的洞察力。