【问题标题】:Spring Websocket TaskExecutor-beans displaces "applicationTaskExecutor"-beanSpring Websocket TaskExecutor-beans 取代“applicationTaskExecutor”-bean
【发布时间】:2019-10-07 12:32:59
【问题描述】:

我有一个使用 @Async-Tasks 的 Spring Boot 2.1.8 应用程序。所有@Async-Tasks 过去都由一个名为applicationTaskExecutor 的自动配置的ThreadPoolTaskExecutor-bean 执行。

我改变了什么? 在类路径中使用 spring-boot-starter-websocket@EnableWebSocketMessageBroker 配置时,applicationTaskExecutor-bean 消失了,取而代之的是四个名称为

的 bean
  • clientInboundChannelExecutor,
  • clientOutboundChannelExecutor,
  • brokerChannelExecutor,
  • messageBrokerTaskScheduler

Spring 将日志记录到控制台:AnnotationAsyncExecutionInterceptor : More than one TaskExecutor bean found within the context, and none is named 'taskExecutor'. Mark one of them as primary or name it 'taskExecutor' (possibly as an alias) in order to use it for async processing: [clientInboundChannelExecutor, clientOutboundChannelExecutor, brokerChannelExecutor, messageBrokerTaskScheduler]

@Async-tasks 现在由SimpleAsyncTaskExecutor 执行。

问题 为什么所有的豆子都不能共存?为什么配置spring-websockets时Spring不会创建applicationTaskExecutor-bean?

【问题讨论】:

标签: spring-boot


【解决方案1】:

作为@M。在 cmets 中提到的 Deinum a @ConditionalOnMissingBean in TaskExecutionAutoConfiguration.java [0] 会导致所描述的行为

我通过自己创建 bean 解决了这个问题。

@ConditionalOnClass(ThreadPoolTaskExecutor.class)
@Configuration
public class ApplicationTaskExecutorBeanConfig {

    @Lazy
    @Bean(name = {APPLICATION_TASK_EXECUTOR_BEAN_NAME, DEFAULT_TASK_EXECUTOR_BEAN_NAME})
    public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) {
        return builder.build();
    }

}

首先,我尝试通过使用

注释我的 bean 工厂方法来更喜欢 TaskExecutionAutoConfiguration.java 中的 bean
@ConditionalOnMissingBean(name = {APPLICATION_TASK_EXECUTOR_BEAN_NAME, DEFAULT_TASK_EXECUTOR_BEAN_NAME})

但它不起作用,因为我的 bean 工厂方法比TaskExecutionAutoConfiguration.java 中的方法更早被调用。

[0]https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.java#L78

感谢@M。 Deinum 供您发表评论。

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 2013-07-22
    • 2019-04-30
    • 2012-07-23
    • 2017-04-09
    • 2012-01-14
    • 2023-03-03
    • 2020-12-20
    相关资源
    最近更新 更多