如何停止和恢复 spring 批处理作业

目标:我使用spring批处理进行数据处理,我希望有一个停止/恢复选项(它停止的地方) .

问题:我能够向正在运行的作业发送停止信号并成功停止 . 但是当我尝试将启动信号发送到同一个工作时,它会创建一个新的工作实例并从一个新工作开始 .

我的问题是如何在 Spring 季批次中为停止的作业实现恢复功能 .

回答(1)

2 years ago

您只需使用相同的参数运行它 . 只是确保你没有使用 RunIdIncrementer 或类似的自动生成唯一的作业参数 .

例如,参见this example . 第一次运行后,我们有:

INFO: Job: [SimpleJob: [name=myJob]] completed with the following parameters: [{}] and the following status: [STOPPED]
Status is: STOPPED, job execution id 0
  #1 step1 COMPLETED
  #2 step2 STOPPED

在第二个之后:

INFO: Job: [SimpleJob: [name=myJob]] completed with the following parameters: [{}] and the following status: [COMPLETED]
Status is: COMPLETED, job execution id 1
  #3 step2 COMPLETED
  #4 step3 COMPLETED

请注意,将重新执行已停止的步骤 . 如果您正在使用面向块的步骤,请确保至少 ItemReader 实现 ItemStream (并使用正确的语义执行) .

标有 allowRestartWithComplete 的步骤将始终重新运行 .