After migrating to spring boot 3 I added a bean BatchObservabilityBeanPostProcessor as it is described here: https://docs.spring.io/spring-batch/docs/current/reference/html/monitoring-and-metrics.html#tracing
I've noticed that spanId and traceId are not propageted in JobExcetionListener methods: afterJob and beforeJob.
In spring boot 2 tracing worked without any additional configuration and it was propagated on all levels (readers, processors, writers, listeners).
Is it expected behavour?
UPDATE CODE EXAMPLE:
Observablity Config
public class BatchObservabilityConfig {
@Bean
public static BatchObservabilityBeanPostProcessor batchObservabilityBeanPostProcessor() {
return new BatchObservabilityBeanPostProcessor();
}
}
Spring Batch Config:
@Bean
public Job job() throws IOException {
return new JobBuilder("job", jobRepository)
.incrementer(new RunIdIncrementer())
.listener(new CustomListener())
.start(step())
.build();
}
@Bean
public Step step() throws IOException {
return new StepBuilder("step", jobRepository)
.<Object, Object>chunk(chunkSize, transactionManager)
.reader(reader())
.processor(processor())
.writer(writer)
.build();
}
@Bean
@StepScope
public ItemReader<Object> reader()
throws IOException {
logger.info("Log in reader"); // here TraceContext is available and TraceId and SpanId is generated using Tracer from micrometer
}
@Bean
@StepScope
public ItemProcessor<Object, Object> processor() {
logger.info("Log in processor"); // here TraceContext is available and TraceId and SpanId is generated using Tracer from micrometer
}
@Bean
@StepScope
public ItemWriter<Object> writer() {
logger.info("Log in writer"); // here TraceContext is available and TraceId and SpanId is generated using Tracer from micrometer
}
JobExecutionListener implementation:
public class CustomListener extends JobExecutionListenerSupport {
@Override
public void afterJob(JobExecution jobExecution) {
logger.info("Log in Listener"); // here NO TraceContext is available and NO TraceId and NO SpanId is generated using Tracer from micrometer
}
}