Harmonize task execution naming
This commit is contained in:
@@ -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())
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user