@Async 异步注解不起作用的坑

背景

今天在做项目的时候要在接口功能完成后要保存操作记录。为了防止保存操作记录功能异常影响主功能,于是打算将保存操作记录方法设置为异步调用。

spring项目中使用异步很简单,只要在异步方法上方放一个@Async注解就可以了。但是今天发现一个坑。

项目是tomcat启动的项目,不是springboot项目。如果要使用这个注解,那么需要在spring配置文件中配置一个异步执行器的线程池才能有用,如下

<!--    异步-->
    <task:executor id="executor" pool-size="5"/>
    <task:annotation-driven executor="executor"/>

但是,加了之后还是没用

解决

项目的service层是采用接口和接口实现类设计的,一开始我把@Async注解放在了接口实现类的saveProjectHistory()方法上,没有起作用。但是把@Async注解放在接口的saveProjectHistory()方法定义上就有用了。

至于具体原因,暂时不知道。

原文地址:https://www.cnblogs.com/qingshan-tang/p/12937616.html