如何在Spring Batch中等待完成不可重新启动的作业

时间:2014-02-13 21:41:31

标签: spring quartz-scheduler spring-batch

我已经将一些夜间预定的工作转换成一个接一个的工作岗位。这在Spring Batch中是完全合法的,因为可以通过引用另一个作业来定义Step。

问题是某些子作业是由Quartz按计划运行的,并且它们是不可重新启动的。这意味着有时候“作业的工作”失败了,因为它试图启动已经运行的作业。这产生了深受喜爱的:

JobRestartException: JobInstance already exists and is not restartable

我的问题是,这是否是一种告诉Spring Batch在引用的作业可用然后运行它之前会哭的方法。这是因为夜间工作流程需要A-> B-> C.我知道我可以编写自己的自定义作业启动器来轮询JobRepository以完成违规子作业的ExecutionStatus,但我希望SB已经考虑过这个常见问题。

更新,为那些询问工作原理的人提供的工作职位示例。 ref 指向SimpleJob bean的作业。这种方法效果很好,但是当子作业已经运行时,如上所述的错误。

<!-- Example Job of Jobs -->
<job id="jobOfJobs">
  <step id="step1">
    <job ref="job1" />
  </step>
  <step id="step2">
    <job ref="job2" />
  </step>
</job>

1 个答案:

答案 0 :(得分:0)

如果您需要管理作业之间的依赖关系,请将其视为使用JobStep

的步骤