spring boot @Async No qualifying ****expected single found 2 applicationTaskExecutor,taskScheduler
使用spring boot 的 俩个注解时:@EnableAsync@Async当一个线程多次重复调用时出现异常:org.springframework.aop.interceptor.AsyncExecutionAspectSupport.getDefaultExecutor(AsyncExecutionAspectSupport.java:236) : Could not find uniqu
·
使用spring boot 的 俩个注解时:
@EnableAsync
@Async
当一个线程多次重复调用时出现异常:
org.springframework.aop.interceptor.AsyncExecutionAspectSupport.getDefaultExecutor(AsyncExecutionAspectSupport.java:236) : Could not find unique TaskExecutor bean
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.core.task.TaskExecutor' available: expected single matching bean but found 2: applicationTaskExecutor,taskScheduler
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1148)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:413)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:346)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:339)
at org.springframework.aop.interceptor.AsyncExecutionAspectSupport.getDefaultExecutor(AsyncExecutionAspectSupport.java:233)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.getDefaultExecutor(AsyncExecutionInterceptor.java:157)
at org.springframework.aop.interceptor.AsyncExecutionAspectSupport.lambda$configure$2(AsyncExecutionAspectSupport.java:119)
at org.springframework.util.function.SingletonSupplier.get(SingletonSupplier.java:100)
at org.springframework.aop.interceptor.AsyncExecutionAspectSupport.determineAsyncExecutor(AsyncExecutionAspectSupport.java:172)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.invoke(AsyncExecutionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)
at com.tuijie.goods.biz.jointstore.store.products.mountain.MountainServiceImpl$$EnhancerBySpringCGLIB$$893511f8.store(<generated>)
根据异常提示信息: 期望一个单列Bean 但是 找到了俩个相匹配的 bean.。所以报错.
但是使用这个 Bean 是直接使用的 spirng 的,根本没有在项目中定义,所以想要知道原因,需要去 生成Bean 的地方看看。
找到代码的地址 org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration#applicationTaskExecutor
@Lazy
@Bean(name = { APPLICATION_TASK_EXECUTOR_BEAN_NAME,
AsyncAnnotationBeanPostProcessor.DEFAULT_TASK_EXECUTOR_BEAN_NAME })
@ConditionalOnMissingBean(Executor.class)
public ThreadPoolTaskExecutor applicationTaskExecutor(TaskExecutorBuilder builder) {
return builder.build();
}
原来 bean 创建的时候有俩个 name ,这俩个 name 刚好对应: applicationTaskExecutor, taskExecutor, 也对应俩个 BeanDefinition. Spring 在选用时候 不知道用哪个,报错。
点进去 @Async 里面说明
其 value 可以指定 Bean Definition 。加上
@Async(value = "applicationTaskExecutor")
运行项目。解决
更多推荐
已为社区贡献1条内容
所有评论(0)