Merge pull request #15748 from cvienot

* pr/15748:
  Polish "Alias auto-configured `TaskExecutor` to make async tasks use it"
  Alias auto-configured `TaskExecutor` to make async tasks use it
pull/15889/head
Stephane Nicoll 6 years ago
commit 66f60fbb7a

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2018 the original author or authors. * Copyright 2012-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -30,12 +30,14 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.core.task.TaskDecorator; import org.springframework.core.task.TaskDecorator;
import org.springframework.core.task.TaskExecutor; import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
/** /**
* {@link EnableAutoConfiguration Auto-configuration} for {@link TaskExecutor}. * {@link EnableAutoConfiguration Auto-configuration} for {@link TaskExecutor}.
* *
* @author Stephane Nicoll * @author Stephane Nicoll
* @author Camille Vienot
* @since 2.1.0 * @since 2.1.0
*/ */
@ConditionalOnClass(ThreadPoolTaskExecutor.class) @ConditionalOnClass(ThreadPoolTaskExecutor.class)
@ -79,7 +81,8 @@ public class TaskExecutionAutoConfiguration {
} }
@Lazy @Lazy
@Bean(name = APPLICATION_TASK_EXECUTOR_BEAN_NAME) @Bean(name = { APPLICATION_TASK_EXECUTOR_BEAN_NAME,
AsyncAnnotationBeanPostProcessor.DEFAULT_TASK_EXECUTOR_BEAN_NAME })
@ConditionalOnMissingBean(Executor.class) @ConditionalOnMissingBean(Executor.class)
public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) { public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) {
return builder.build(); return builder.build();

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2018 the original author or authors. * Copyright 2012-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -38,6 +38,7 @@ import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult; import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.util.ReflectionTestUtils;
@ -49,6 +50,7 @@ import static org.mockito.Mockito.verify;
* Tests for {@link TaskExecutionAutoConfiguration}. * Tests for {@link TaskExecutionAutoConfiguration}.
* *
* @author Stephane Nicoll * @author Stephane Nicoll
* @author Camille Vienot
*/ */
public class TaskExecutionAutoConfigurationTests { public class TaskExecutionAutoConfigurationTests {
@ -152,6 +154,21 @@ public class TaskExecutionAutoConfigurationTests {
}); });
} }
@Test
public void enableAsyncUsesAutoConfiguredOneByDefaultEvenThoughSchedulingIsConfigured() {
this.contextRunner
.withPropertyValues("spring.task.execution.thread-name-prefix=task-test-")
.withConfiguration(
AutoConfigurations.of(TaskSchedulingAutoConfiguration.class))
.withUserConfiguration(AsyncConfiguration.class,
SchedulingConfiguration.class, TestBean.class)
.run((context) -> {
TestBean bean = context.getBean(TestBean.class);
String text = bean.echo("something").get();
assertThat(text).contains("task-test-").contains("something");
});
}
private ContextConsumer<AssertableApplicationContext> assertTaskExecutor( private ContextConsumer<AssertableApplicationContext> assertTaskExecutor(
Consumer<ThreadPoolTaskExecutor> taskExecutor) { Consumer<ThreadPoolTaskExecutor> taskExecutor) {
return (context) -> { return (context) -> {
@ -209,6 +226,12 @@ public class TaskExecutionAutoConfigurationTests {
} }
@Configuration
@EnableScheduling
static class SchedulingConfiguration {
}
static class TestBean { static class TestBean {
@Async @Async

Loading…
Cancel
Save