Spring @Async无法实现异步的解决方案
Spring @Async无法实现异步
问题原因
项目中存在2个配置文件:springMVC.xml和beanDefines.xml,它们都配置了<context:component-scan base-package="com" />。
在beanDefines.xml还配置了<task:annotation-driven/>。
从启动日志中发现,spring先加载的是beanDefines.xml,后加载的是springMVC.xml。
由于springMVC.xml的context:component-scan覆盖了beanDefines.xml的配置,而<task:annotation-driven/>是否有效是依赖于context:component-scan的配置的。
导致beanDefines.xml配置的<task:annotation-driven/>不起作用了。
解决办法
1、删除beanDefines.xml的<context:component-scan base-package="com" />和<task:annotation-driven/>;
2、springMVC.xml添加配置<task:annotation-driven/>。
@Async不起作用
首先介绍一下如何@Async注解,
1.xml头文件必须配置标记红色部分
2.配置任务和线程池
<!-- 任务及线程池 --> <task:annotation-driven executor="asyncExecutor" /> <task:executor id="asyncExecutor" pool-size="100-10000" queue-capacity="10"/> <!-- 注解扫描 --> <context:component-scan base-package="com.baisq"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
3.配置spring依赖的jar(不介绍这个了)
4.在你需要异步调用的方法上使用@Async注解
5.但是你可能遇到@Async不起作用的时候
我就遇到了,我的问题是容器启动加载了如下两个xml文件
springmvc.xml文件仅仅配置扫描注解,applicationContext.xml配置了任务和线程池和扫描注解,先加载了applicationContext.xml,后加载了springMvc.xml。
applicationContext.xml为扫描到的类加上@Async的作用(任务和线程池的配置依赖于扫描到的类),然后springMvc加载后的bean覆盖了applicationContext的bean,覆盖掉了@Async的作用,因为springmvc没有配置任务和线程池,
导致@Async没有起到作用。
6.如果你遇到上述问题
检查一下加载的xml文件是否存在覆盖的问题。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
使用springboot每日推送早安问候语到用户微信的全过程
近期网上又出现一股给女朋友做微信公众号推送的潮流,所以这篇文章主要给大家介绍了关于如何使用springboot每日推送早安问候语到用户微信的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下2022-11-11反射机制:getDeclaredField和getField的区别说明
这篇文章主要介绍了反射机制:getDeclaredField和getField的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-06-06Java集合框架之Stack Queue Deque使用详解刨析
早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同2021-10-10使用JDBC4.0操作XML类型的字段(保存获取xml数据)的方法
jdbc4.0最重要的特征是支持xml数据类型,接下来通过本文重点给大家介绍如何使用jdbc4.0操作xml类型的字段,对jdbc4.0 xml相关知识感兴趣的朋友一起看下吧2016-08-08spring boot-2.1.16整合swagger-2.9.2 含yml配置文件的代码详解
这篇文章主要介绍了spring boot-2.1.16整合swagger-2.9.2 含yml配置文件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08
最新评论