I am looking for help to find out a way to set job execution context in my chunk Listener.
@Bean
public Step testStep(
JdbcCursorItemReader<TestStep> testStageDataReader,
TestStepProcessor testStepProcessor,
CompositeItemWriter<Writer> testWriter,
PlatformTransactionManager transactionManager,
JobRepository jobRepository, TestChunkListener testChunkListener) {
return stepBuilderFactory
.get("TESTING")
.<>chunk(100)
.reader(testStageDataReader)
.processor(testStepProcessor)
.writer(testWriter)
.faultTolerant()
.skip(DataIntegrityViolationException.class)
.skipLimit(4)
.listener(testSkipListener)
.transactionManager(transactionManager)
.repository(jobRepository)
.build();
}
The Skip Listener
@Component
@RequiredArgsConstructor
@Slf4j
@StepScope
public class TestSkipListener {
private final TestRepository testRepository;
@Value("#{jobExecutionContext['jobExecutionTestId']}")
private Long jobExecutionTestId; //this is null
@OnSkipInWrite
public void onSkipInWrite(Writer writer,
Throwable t) {
logException(t);
}
}
I am setting job execution id in
@Component
@Slf4j
@RequiredArgsConstructor
public class TestJobListener extends JobExecutionListenerSupport {
@Override
public void beforeJob(JobExecution jobExecution) {
long jobExecutionId = jobExecution.getJobId();
jobExecution.getExecutionContext()
.put("jobExecutionTestId", jobExecutionId);
}
}
This works fine in my Processor and Writer but at skip listener, it is coming as null