异步调用:使用@async注解实现

偏执的太偏执、 2021-11-23 00:06 501阅读 0赞

前言:在实际的业务中总有这样的场景,后台执行的时间过长,前端需要立即返回结果,以取得良好的客户体验。那么后台的异步调用改怎么实现呢?

首先介绍一下如何@Async注解,

1xml头文件必须配置标记红色部分

20170721160040492

2配置任务和线程池

  1. <!-- 任务及线程池 -->
  2. <task:annotation-driven executor="asyncExecutor" />
  3. <task:executor id="asyncExecutor" pool-size="100-10000" queue-capacity="10"/>
  4. <!-- 注解扫描 -->
  5. <context:component-scan base-package="com.baisq">
  6. <context:include-filter type="annotation"
  7. expression= "org.springframework.stereotype.Controller" />
  8. </context:component-scan>

3配置spring依赖的jar(不介绍这个了)

4在你需要异步调用的方法上使用@Async注解

20170721160134570

5但是你可能遇到@Async不起作用的时候,我就遇到了,我的问题是容器启动加载了如下两个xml文件

20170721160224226

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

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

导致@Async没有起到作用。

6如果你遇到上述问题,检查一下加载的xml文件是否存在覆盖的问题。

发表评论

表情:
评论列表 (有 0 条评论,501人围观)

还没有评论,来说两句吧...

相关阅读

    相关 异步调用Async

    什么是异步调用? 异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行。