背景
今天在做项目的时候要在接口功能完成后要保存操作记录。为了防止保存操作记录功能异常影响主功能,于是打算将保存操作记录方法设置为异步调用。
spring项目中使用异步很简单,只要在异步方法上方放一个@Async注解就可以了。但是今天发现一个坑。
项目是tomcat启动的项目,不是springboot项目。如果要使用这个注解,那么需要在spring配置文件中配置一个异步执行器的线程池才能有用,如下
<!-- 异步--> <task:executor id="executor" pool-size="5"/> <task:annotation-driven executor="executor"/>
但是,加了之后还是没用
解决
项目的service层是采用接口和接口实现类设计的,一开始我把@Async注解放在了接口实现类的saveProjectHistory()方法上,没有起作用。但是把@Async注解放在接口的saveProjectHistory()方法定义上就有用了。
至于具体原因,暂时不知道。