java - 从 4.2.0.RC3 升级到 4.2.0.RELEASE 时出现 Spring Async 问题

标签 java spring spring-mvc executorservice spring-websocket

我有一个使用 spring(4.2.x) 工件 spring-webmvc、spring-messaging、spring-websocket 的 Web 应用程序

我的 spring 配置 java 类中有以下 @Enable* 注释

@EnableWebMvc
@EnableWebSocketMessageBroker
@EnableAsync
@EnableMBeanExport

WebSocket 用于向浏览器客户端广播消息。 而且很少有用@Async注解的异步方法

该应用程序在 Spring 版本 4.2.0.RC3 上运行良好。但是当我将它更改为 GA 版本 4.2.0.RELEASE 时,我在启动时得到以下异常。如果我删除 @EnableAsync 它可以正常工作,但我需要异步功能。

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.core.task.TaskExecutor] is defined: expected single matching bean but found 4: clientOutboundChannelExecutor,messageBrokerTaskScheduler,clientInboundChannelExecutor,brokerChannelExecutor
    org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:366)
    org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:332)
    org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor.setBeanFactory(AsyncAnnotationBeanPostProcessor.java:128)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1597)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1565)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
    org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:228)
    org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:682)
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:522)
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:667)
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:539)
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:493)
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)

最佳答案

在 Spring 应用上下文配置中添加 bean

@Configuration
@EnableAsync
public class AppContext extends WebMvcConfigurationSupport {
    @Bean
    public Executor taskExecutor() {
        return new SimpleAsyncTaskExecutor();
    }
}

我建议你引用linuxism.tistory.com/2076

如果您在 XML 中声明您的执行程序,那么您可以创建一个类并将其命名为 TaskExecutor。然后当 Spring 尝试查找 TaskExecutor bean 时,它会找到这个。

@Component
public class TaskExecutor extends SimpleAsyncTaskExecutor {
}

关于java - 从 4.2.0.RC3 升级到 4.2.0.RELEASE 时出现 Spring Async 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31816365/

相关文章:

java - 如何查找数据是英文还是中文

java - 如何更改 Android 示例主页应用程序中显示的缩略图数量?

Spring Security Oauth2 : Extended UserDetails not returned by the Principal object

spring - Grails 1.3.9从ApplicationContext获取服务

java - 找不到 com.fasterxml.jackson.core.JsonParseException 的类文件

java - 带有嵌入式 jetty 服务器的 Spring MVC 资源

java - 尝试向 Web 服务发送 SOAP 请求时出现 WS 安全错误

spring - 无法启动 cucumber 简单测试

spring-mvc - @ActionMapping、@RequestMapping、@Rendermapping的区别

java - 如何使用 JFreeChart 自定义 XYLineChart