我有一个使用spring(4.2.x)工件的Web应用程序spring-webmvc,spring-messaging,spring-websocket
我在spring config 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.html" target="_blank">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)
你的一个中@Configuration
必须实现AsyncConfigurer
指定特定TaskExecutor
的@Async
方法。
否则,将会使从中选择哪个混淆applicationContext
。
即使可以正常使用RC3
也没关系,因此该错误已针对进行了修复GA
。
更新
源代码AsyncAnnotationBeanPostProcessor
如下所示:
Executor executorToUse = this.executor;
if (executorToUse == null) {
try {
// Search for TaskExecutor bean... not plain Executor since that would
// match with ScheduledExecutorService as well, which is unusable for
// our purposes here. TaskExecutor is more clearly designed for it.
executorToUse = beanFactory.getBean(TaskExecutor.class);
}
catch (NoUniqueBeanDefinitionException ex) {
try {
executorToUse = beanFactory.getBean(DEFAULT_TASK_EXECUTOR_BEAN_NAME, TaskExecutor.class);
}
catch (NoSuchBeanDefinitionException ex2) {
throw new IllegalStateException("More than one TaskExecutor bean exists within the context, " +
"and none is named 'taskExecutor'. Mark one of them as primary or name it " +
"'taskExecutor' (possibly as an alias); or specify the AsyncConfigurer interface " +
"and implement getAsyncExecutor() accordingly.", ex);
}
}
catch (NoSuchBeanDefinitionException ex) {
logger.debug("Could not find default TaskExecutor bean", ex);
// Giving up -> falling back to default executor within the advisor...
}
}
因此,我想在从RC3迁移到GA之前,您已经taskExecutor
对此事有所了解。
正如您在StackTrace上看到的那样,已经有一个这样的bean …
在android版本为4.1.2的时候,这段代码运行良好。但是在4.2.0之后,代码就不工作了,下面是我的代码 我的依赖是
在Android Studio的提示下,我将我项目的Android Gradle插件从4.2.0-beta02升级到4.2.0-beta03。现在,每次同步构建文件时,都会出现以下构建错误: 此错误以前没有显示。下面是生成错误的模块的构建文件: 那么,这是最新AGP版本的一个bug,还是我的构建文件有什么问题,以前被忽略了,但现在被标记了?(我试着注释掉块的整个主体,但错误依然存在。我还试着使缓存
我正在更新我们应用程序中落后的一些maven依赖项,从flyway maven插件4.2.0升级时遇到了一个问题,我们的reset和migrate make命令失败了,我找不到任何有用的结果。 最初,我试图从4.2.0转移到5.2.4。当我无法解决我的错误时,我退回到5.0.0的单个版本。在5.0.0的发行说明之后,我将添加到我的flyway-$env.properties文件中,并更新了我的Ma
我刚刚将我的Android Studio从1.0 RC 2升级到1.0.1。 之后,我被提示将gradle插件从0.14.0更新到1.0.0。 一旦我这么做了,Gradle构建就失败了- 还有其他人面临过类似的问题吗?非常感谢! 我的身材。格拉德尔-
应用程序抛出以下错误: org.springframework.beans.factory.NoUniqueBean定义异常:没有定义[org.springframework.transaction.PlatformTransactionManager]类型的合格bean:预期的单个匹配bean,但找到3 大家好,我们有一个webapp,我们升级到了上面的配置,它在java 8、tomcat 8上
我试图将struts版本从2.3.35升级到2.5.17,但是遇到了如下问题: 我一直在使用本指南迁移到strut版本2.5.17:https://cwiki.apache.org/confluence/display/WW/Struts2.3到2.5迁移 我怀疑这是瓷砖的问题。 我已将所有与struts2-ties-plugin相关的jar升级到2.5.17版,包括struts2-ties-pl
我试图安装Laravel使用Composer,但我一直得到以下错误: 警告:输入: '\' (ASCII=92)状态=1中的意外字符在第46行 /homepages/45/d487622789/htdocs/laravel/artisan 解析错误:语法错误,第46行 /homepages/45/d487622789/htdocs/laravel/artisan意外T_STRING 脚本php a