3

Goal : I am using spring batch for data processing and I want to have an option to stop/resume (where it left off).

Issue: I am able to send a stop signal to a running job and it gets stopped successfully. But when I try to send start signal to same job its creating a new instance of the job and starts as a fresh job.

My question is how can we achieve a resume functionality for a stopped job in spring batch.

user5974438
  • 31
  • 1
  • 2

1 Answers1

4

You just have to run it with the same parameters. Just make sure you haven't marked the job as non-restarted and that you're not using RunIdIncrementer or similar to automatically generate unique job parameters.

See for instance, this example. After the first run, we have:

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

And after the second:

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

Note that stopped steps will be re-executed. If you're using chunk-oriented steps, make sure that at least the ItemReader implements ItemStream (and does it with the correct semantics).

Steps marked with allowRestartWithComplete will always be re-run.

Artefacto
  • 96,375
  • 17
  • 202
  • 225