Harmonize task execution naming

This commit is contained in:
Stephane Nicoll
2018-08-16 14:34:57 +02:00
parent 8743f4dda9
commit dcd80c087e
7 changed files with 40 additions and 37 deletions

View File

@@ -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<TaskExecutorCustomizer> taskExecutorCustomizers;
private final ObjectProvider<TaskDecorator> taskDecorator;
public TaskExecutorAutoConfiguration(TaskProperties properties,
public TaskExecutionAutoConfiguration(TaskExecutionProperties properties,
ObjectProvider<TaskExecutorCustomizer> taskExecutorCustomizers,
ObjectProvider<TaskDecorator> 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())

View File

@@ -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();

View File

@@ -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));
}

View File

@@ -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);

View File

@@ -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(

View File

@@ -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

View File

@@ -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