Job Execution Context and Step Execution Context
Job Execution Context – Available throughout the entire job execution across various steps. Stores data that needs to be shared across multiple steps or retrieved after a job restart. it survives restarts and failures.
I.E.
If you download a file in Step 1 and need its path in Step 3, store the path in the Job Execution Context.
Step Execution Context – Limited to the specific step execution.Stores data relevant only to that step, such as reader/writer state or counters.
I.E.
A reader might store the last read line number here so it can resume from that point if the step fails. We can pass values between steps and jobs using ExecutionContextPromotionListener.
BatchConfig.java
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Job sampleJob() {
return jobBuilderFactory.get("sampleJob")
.start(step1())
.next(step2())
.listener(promotionListener()) // Promote data from step to job context
.build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.tasklet((contribution, chunkContext) -> {
StepExecution stepExecution = contribution.getStepExecution();
stepExecution.getExecutionContext().putString("stepData", "Hello from Step 1");
return RepeatStatus.FINISHED;
})
.build();
}
@Bean
public Step step2() {
return stepBuilderFactory.get("step2")
.tasklet((contribution, chunkContext) -> {
JobExecution jobExecution = contribution.getStepExecution().getJobExecution();
String data = jobExecution.getExecutionContext().getString("stepData");
System.out.println("Retrieved from Job Execution Context: " + data);
return RepeatStatus.FINISHED;
})
.build();
}
@Bean
public ExecutionContextPromotionListener promotionListener() {
ExecutionContextPromotionListener listener = new ExecutionContextPromotionListener();
listener.setKeys(new String[] { "stepData" }); // Promote this key from step to job
return listener;
}
}
Output
Retrieved from Job Execution Context: Hello from Step 1