Skip to content

Commit e1f8be0

Browse files
committed
GH-637 - Enable TraceContext propagation across asynchronous threads.
We're now registering a customizers for both the SimpleAsyncTaskExecutor (used for virtual threads) and the ThreadPoolTaskExecutor to register a ContextPropagatingTaskDecorator.
1 parent 324e824 commit e1f8be0

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

spring-modulith-observability/src/main/java/org/springframework/modulith/observability/autoconfigure/ModuleObservabilityAutoConfiguration.java

+17
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,13 @@
2828
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
2929
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3030
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
31+
import org.springframework.boot.autoconfigure.condition.ConditionalOnThreading;
32+
import org.springframework.boot.autoconfigure.thread.Threading;
33+
import org.springframework.boot.task.SimpleAsyncTaskExecutorCustomizer;
34+
import org.springframework.boot.task.ThreadPoolTaskExecutorCustomizer;
3135
import org.springframework.context.annotation.Bean;
3236
import org.springframework.context.annotation.Configuration;
37+
import org.springframework.core.task.support.ContextPropagatingTaskDecorator;
3338
import org.springframework.modulith.observability.ModuleEventListener;
3439
import org.springframework.modulith.observability.ModuleTracingBeanPostProcessor;
3540
import org.springframework.modulith.runtime.ApplicationModulesRuntime;
@@ -53,6 +58,18 @@ static ModuleEventListener tracingModuleEventListener(ApplicationModulesRuntime
5358
return new ModuleEventListener(runtime, () -> tracer.getObject());
5459
}
5560

61+
@Bean
62+
@ConditionalOnThreading(Threading.VIRTUAL)
63+
SimpleAsyncTaskExecutorCustomizer simpleAsyncTaskExecutorCustomizer() {
64+
return executor -> executor.setTaskDecorator(new ContextPropagatingTaskDecorator());
65+
}
66+
67+
@Bean
68+
@ConditionalOnThreading(Threading.PLATFORM)
69+
ThreadPoolTaskExecutorCustomizer threadPoolTaskExecutorCustomizer() {
70+
return executor -> executor.setTaskDecorator(new ContextPropagatingTaskDecorator());
71+
}
72+
5673
/**
5774
* Brave-specific auto configuration.
5875
*

0 commit comments

Comments
 (0)