Browse Source

Add support for context propagation in task execution

Signed-off-by: Sandipan <bsandipan99@gmail.com>
pull/48385/head
Sandipan 2 months ago
parent
commit
dddfab9307
  1. 13
      core/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionProperties.java
  2. 30
      core/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutorConfigurations.java

13
core/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionProperties.java

@ -44,6 +44,11 @@ public class TaskExecutionProperties { @@ -44,6 +44,11 @@ public class TaskExecutionProperties {
*/
private Mode mode = Mode.AUTO;
/**
* Indicates whether to register ContextPropagatingTaskDecorator bean
*/
private boolean propagateContext = false;
/**
* Prefix to use for the names of newly created threads.
*/
@ -69,6 +74,14 @@ public class TaskExecutionProperties { @@ -69,6 +74,14 @@ public class TaskExecutionProperties {
this.mode = mode;
}
public boolean getPropagateContext() {
return this.propagateContext;
}
public void setPropagateContext(boolean propagateContext) {
this.propagateContext = propagateContext;
}
public String getThreadNamePrefix() {
return this.threadNamePrefix;
}

30
core/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutorConfigurations.java

@ -75,17 +75,39 @@ class TaskExecutorConfigurations { @@ -75,17 +75,39 @@ class TaskExecutorConfigurations {
@Bean(TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME)
@ConditionalOnThreading(Threading.VIRTUAL)
SimpleAsyncTaskExecutor applicationTaskExecutorVirtualThreads(SimpleAsyncTaskExecutorBuilder builder) {
return builder.build();
SimpleAsyncTaskExecutor applicationTaskExecutorVirtualThreads(SimpleAsyncTaskExecutorBuilder builder,
ObjectProvider<TaskDecorator> decorators) {
TaskDecorator decorator = decorators.getIfAvailable();
SimpleAsyncTaskExecutor executor = builder.build();
if (decorator != null) {
executor.setTaskDecorator(decorator);
}
return executor;
}
@Bean(TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME)
@Lazy
@ConditionalOnThreading(Threading.PLATFORM)
ThreadPoolTaskExecutor applicationTaskExecutor(ThreadPoolTaskExecutorBuilder threadPoolTaskExecutorBuilder) {
return threadPoolTaskExecutorBuilder.build();
ThreadPoolTaskExecutor applicationTaskExecutor( ThreadPoolTaskExecutorBuilder threadPoolTaskExecutorBuilder,
ObjectProvider<TaskDecorator> decorators ) {
TaskDecorator decorator = decorators.getIfAvailable();
ThreadPoolTaskExecutor executor = builder.build();
if (decorator != null) {
executor.setTaskDecorator(decorator);
}
return executor;
}
@Bean
@ConditionalOnProperty(
prefix = "spring.task.execution",
name = "propagate-context",
havingValue = "true",
matchIfMissing = false
)
TaskDecorator contextPropagatingTaskDecorator() {
return new ContextPropagatingTaskDecorator();
}
}
@Configuration(proxyBeanMethods = false)

Loading…
Cancel
Save