diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java index 94c4dcbfafd..977c90cef7f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java @@ -27,6 +27,7 @@ import org.springframework.boot.task.TaskExecutorBuilder; import org.springframework.boot.task.TaskExecutorCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; import org.springframework.core.task.TaskDecorator; import org.springframework.core.task.TaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @@ -77,6 +78,7 @@ public class TaskExecutionAutoConfiguration { return builder; } + @Lazy @Bean(name = APPLICATION_TASK_EXECUTOR_BEAN_NAME) @ConditionalOnMissingBean(Executor.class) public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfigurationTests.java index 710b7ef9bcf..cb8c26b7dde 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfigurationTests.java @@ -20,6 +20,7 @@ import java.util.concurrent.Executor; import java.util.concurrent.Future; import java.util.function.Consumer; +import org.junit.Rule; import org.junit.Test; import org.springframework.beans.DirectFieldAccessor; @@ -29,6 +30,7 @@ import org.springframework.boot.task.TaskExecutorCustomizer; import org.springframework.boot.test.context.assertj.AssertableApplicationContext; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.context.runner.ContextConsumer; +import org.springframework.boot.test.rule.OutputCapture; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.task.SyncTaskExecutor; @@ -55,6 +57,9 @@ public class TaskExecutionAutoConfigurationTests { .withConfiguration( AutoConfigurations.of(TaskExecutionAutoConfiguration.class)); + @Rule + public final OutputCapture output = new OutputCapture(); + @Test public void taskExecutorBuilderShouldApplyCustomSettings() { this.contextRunner @@ -101,11 +106,15 @@ public class TaskExecutionAutoConfigurationTests { @Test public void taskExecutorAutoConfigured() { + this.output.reset(); this.contextRunner.run((context) -> { + assertThat(this.output.toString()) + .doesNotContain("Initializing ExecutorService"); assertThat(context).hasSingleBean(Executor.class); assertThat(context).hasBean("applicationTaskExecutor"); assertThat(context).getBean("applicationTaskExecutor") .isInstanceOf(ThreadPoolTaskExecutor.class); + assertThat(this.output.toString()).contains("Initializing ExecutorService"); }); }