gpt4 book ai didi

Spring @Async无法实现异步的解决方案

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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头文件必须配置标记红色部分

Spring @Async无法实现异步的解决方案

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注解

Spring @Async无法实现异步的解决方案

5.但是你可能遇到@Async不起作用的时候

我就遇到了,我的问题是容器启动加载了如下两个xml文件 。

Spring @Async无法实现异步的解决方案

springmvc.xml文件仅仅配置扫描注解,applicationContext.xml配置了任务和线程池和扫描注解,先加载了applicationContext.xml,后加载了springMvc.xml.

applicationContext.xml为扫描到的类加上@Async的作用(任务和线程池的配置依赖于扫描到的类),然后springMvc加载后的bean覆盖了applicationContext的bean,覆盖掉了@Async的作用,因为springmvc没有配置任务和线程池, 。

导致@Async没有起到作用.

6.如果你遇到上述问题

检查一下加载的xml文件是否存在覆盖的问题.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/lxxxzzl/article/details/39735561 。

最后此篇关于Spring @Async无法实现异步的解决方案的文章就讲到这里了,如果你想了解更多关于Spring @Async无法实现异步的解决方案的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com