diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutorAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java similarity index 91% rename from spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutorAutoConfiguration.java rename to spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java index a5c93e413f..62709f5d01 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutorAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java @@ -40,21 +40,21 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; */ @ConditionalOnClass(ThreadPoolTaskExecutor.class) @Configuration -@EnableConfigurationProperties(TaskProperties.class) -public class TaskExecutorAutoConfiguration { +@EnableConfigurationProperties(TaskExecutionProperties.class) +public class TaskExecutionAutoConfiguration { /** * Bean name of the application {@link TaskExecutor}. */ public static final String APPLICATION_TASK_EXECUTOR_BEAN_NAME = "applicationTaskExecutor"; - private final TaskProperties properties; + private final TaskExecutionProperties properties; private final ObjectProvider taskExecutorCustomizers; private final ObjectProvider taskDecorator; - public TaskExecutorAutoConfiguration(TaskProperties properties, + public TaskExecutionAutoConfiguration(TaskExecutionProperties properties, ObjectProvider taskExecutorCustomizers, ObjectProvider taskDecorator) { this.properties = properties; @@ -65,7 +65,7 @@ public class TaskExecutorAutoConfiguration { @Bean @ConditionalOnMissingBean public TaskExecutorBuilder taskExecutorBuilder() { - TaskProperties.Pool pool = this.properties.getPool(); + TaskExecutionProperties.Pool pool = this.properties.getPool(); return new TaskExecutorBuilder().queueCapacity(pool.getQueueCapacity()) .corePoolSize(pool.getCoreSize()).maxPoolSize(pool.getMaxSize()) .allowCoreThreadTimeOut(pool.isAllowCoreThreadTimeout()) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionProperties.java similarity index 96% rename from spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskProperties.java rename to spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionProperties.java index d06b0e4e8c..437509c540 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionProperties.java @@ -24,9 +24,10 @@ import org.springframework.boot.context.properties.ConfigurationProperties; * Configuration properties for task execution. * * @author Stephane Nicoll + * @since 2.1.0 */ -@ConfigurationProperties("spring.task") -public class TaskProperties { +@ConfigurationProperties("spring.task.execution") +public class TaskExecutionProperties { private final Pool pool = new Pool(); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java index 92677c0a7c..f5c2f6a0e5 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.java @@ -46,7 +46,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; -import org.springframework.boot.autoconfigure.task.TaskExecutorAutoConfiguration; +import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProviders; import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration; import org.springframework.boot.autoconfigure.validation.ValidatorAdapter; @@ -142,7 +142,7 @@ import org.springframework.web.servlet.view.InternalResourceViewResolver; @ConditionalOnMissingBean(WebMvcConfigurationSupport.class) @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10) @AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, - TaskExecutorAutoConfiguration.class, ValidationAutoConfiguration.class }) + TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class }) public class WebMvcAutoConfiguration { public static final String DEFAULT_PREFIX = ""; @@ -213,9 +213,9 @@ public class WebMvcAutoConfiguration { @Override public void configureAsyncSupport(AsyncSupportConfigurer configurer) { if (this.beanFactory.containsBean( - TaskExecutorAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME)) { + TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME)) { Object taskExecutor = this.beanFactory.getBean( - TaskExecutorAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME); + TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME); if (taskExecutor instanceof AsyncTaskExecutor) { configurer.setTaskExecutor(((AsyncTaskExecutor) taskExecutor)); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutorAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfigurationTests.java similarity index 91% rename from spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutorAutoConfigurationTests.java rename to spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfigurationTests.java index dc23f532e1..710b7ef9bc 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutorAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfigurationTests.java @@ -45,24 +45,25 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; /** - * Tests for {@link TaskExecutorAutoConfiguration}. + * Tests for {@link TaskExecutionAutoConfiguration}. * * @author Stephane Nicoll */ -public class TaskExecutorAutoConfigurationTests { +public class TaskExecutionAutoConfigurationTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration( - AutoConfigurations.of(TaskExecutorAutoConfiguration.class)); + AutoConfigurations.of(TaskExecutionAutoConfiguration.class)); @Test public void taskExecutorBuilderShouldApplyCustomSettings() { this.contextRunner - .withPropertyValues("spring.task.pool.queue-capacity=10", - "spring.task.pool.core-size=2", "spring.task.pool.max-size=4", - "spring.task.pool.allow-core-thread-timeout=true", - "spring.task.pool.keep-alive=5s", - "spring.task.thread-name-prefix=mytest-") + .withPropertyValues("spring.task.execution.pool.queue-capacity=10", + "spring.task.execution.pool.core-size=2", + "spring.task.execution.pool.max-size=4", + "spring.task.execution.pool.allow-core-thread-timeout=true", + "spring.task.execution.pool.keep-alive=5s", + "spring.task.execution.thread-name-prefix=mytest-") .run(assertTaskExecutor((taskExecutor) -> { DirectFieldAccessor dfa = new DirectFieldAccessor(taskExecutor); assertThat(dfa.getPropertyValue("queueCapacity")).isEqualTo(10); @@ -132,7 +133,8 @@ public class TaskExecutorAutoConfigurationTests { @Test public void enableAsyncUsesAutoConfiguredOneByDefault() { - this.contextRunner.withPropertyValues("spring.task.thread-name-prefix=task-test-") + this.contextRunner + .withPropertyValues("spring.task.execution.thread-name-prefix=task-test-") .withUserConfiguration(AsyncConfiguration.class, TestBean.class) .run((context) -> { assertThat(context).hasSingleBean(TaskExecutor.class); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java index 63d4cf9daf..8b48bf502f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfigurationTests.java @@ -37,7 +37,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; -import org.springframework.boot.autoconfigure.task.TaskExecutorAutoConfiguration; +import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration; import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration; import org.springframework.boot.autoconfigure.validation.ValidatorAdapter; import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter; @@ -479,7 +479,7 @@ public class WebMvcAutoConfigurationTests { public void asyncTaskExecutorWithApplicationTaskExecutor() { this.contextRunner .withConfiguration( - AutoConfigurations.of(TaskExecutorAutoConfiguration.class)) + AutoConfigurations.of(TaskExecutionAutoConfiguration.class)) .run((context) -> { assertThat(context).hasSingleBean(AsyncTaskExecutor.class); assertThat(ReflectionTestUtils.getField( @@ -494,7 +494,7 @@ public class WebMvcAutoConfigurationTests { this.contextRunner .withUserConfiguration(CustomApplicationTaskExecutorConfig.class) .withConfiguration( - AutoConfigurations.of(TaskExecutorAutoConfiguration.class)) + AutoConfigurations.of(TaskExecutionAutoConfiguration.class)) .run((context) -> { assertThat(context).doesNotHaveBean(AsyncTaskExecutor.class); assertThat(ReflectionTestUtils.getField( @@ -508,7 +508,7 @@ public class WebMvcAutoConfigurationTests { public void asyncTaskExecutorWithMvcConfigurerCanOverrideExecutor() { this.contextRunner.withUserConfiguration(CustomAsyncTaskExecutorConfigurer.class) .withConfiguration( - AutoConfigurations.of(TaskExecutorAutoConfiguration.class)) + AutoConfigurations.of(TaskExecutionAutoConfiguration.class)) .run((context) -> { assertThat(ReflectionTestUtils.getField( context.getBean(RequestMappingHandlerAdapter.class), @@ -522,7 +522,7 @@ public class WebMvcAutoConfigurationTests { public void asyncTaskExecutorWithCustomNonApplicationTaskExecutor() { this.contextRunner.withUserConfiguration(CustomAsyncTaskExecutorConfig.class) .withConfiguration( - AutoConfigurations.of(TaskExecutorAutoConfiguration.class)) + AutoConfigurations.of(TaskExecutionAutoConfiguration.class)) .run((context) -> { assertThat(context).hasSingleBean(AsyncTaskExecutor.class); assertThat(ReflectionTestUtils.getField( diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index 54a561bdaa..9bc7de154f 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -161,13 +161,13 @@ content into your application. Rather, pick only the properties that you need. spring.sendgrid.proxy.host= # SendGrid proxy host. spring.sendgrid.proxy.port= # SendGrid proxy port. - # TASK EXECUTION ({sc-spring-boot-autoconfigure}/task/TaskProperties.{sc-ext}[TaskProperties]) - spring.task.pool.allow-core-thread-timeout=true # Whether core threads are allowed to time out. This enables dynamic growing and shrinking of the pool. - spring.task.pool.core-size=8 # Core number of threads. - spring.task.pool.keep-alive=60s # Time limit for which threads may remain idle before being terminated. - spring.task.pool.max-size= # Maximum allowed number of threads. If tasks are filling up the queue, the pool can expand up to that size to accommodate the load. Ignored if the queue is unbounded. - spring.task.pool.queue-capacity= # Queue capacity. An unbounded capacity does not increase the pool and therefore ignores the "max-size" property. - spring.task.thread-name-prefix=task # Prefix to use for the names of newly created threads. + # TASK EXECUTION ({sc-spring-boot-autoconfigure}/task/TaskExecutionProperties.{sc-ext}[TaskExecutionProperties]) + spring.task.execution.pool.allow-core-thread-timeout=true # Whether core threads are allowed to time out. This enables dynamic growing and shrinking of the pool. + spring.task.execution.pool.core-size=8 # Core number of threads. + spring.task.execution.pool.keep-alive=60s # Time limit for which threads may remain idle before being terminated. + spring.task.execution.pool.max-size= # Maximum allowed number of threads. If tasks are filling up the queue, the pool can expand up to that size to accommodate the load. Ignored if the queue is unbounded. + spring.task.execution.pool.queue-capacity= # Queue capacity. An unbounded capacity does not increase the pool and therefore ignores the "max-size" property. + spring.task.execution.thread-name-prefix=task- # Prefix to use for the names of newly created threads. # ---------------------------------------- # WEB PROPERTIES diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc index 0fbe182686..b5663b1c72 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc @@ -6146,14 +6146,14 @@ asynchronous task execution (`@EnableAsync`) and Spring MVC asynchronous request processing. The thread pool uses 8 core threads that can grow and shrink according to the load. Those -default settings can be fine-tuned using the `spring.task` namespace as shown in the -following example: +default settings can be fine-tuned using the `spring.task.execution` namespace as shown in +the following example: [source,properties,indent=0] ---- - spring.task.pool.max-threads=16 - spring.task.pool.queue-capacity=100 - spring.task.pool.keep-alive=10s + spring.task.execution.pool.max-threads=16 + spring.task.execution.pool.queue-capacity=100 + spring.task.execution.pool.keep-alive=10s ---- This changes the thread pool to use a bounded queue so that when the queue is full (100