背景
今天在做項目的時候要在接口功能完成后要保存操作記錄。為了防止保存操作記錄功能異常影響主功能,於是打算將保存操作記錄方法設置為異步調用。
spring項目中使用異步很簡單,只要在異步方法上方放一個@Async注解就可以了。但是今天發現一個坑。
項目是tomcat啟動的項目,不是springboot項目。如果要使用這個注解,那么需要在spring配置文件中配置一個異步執行器的線程池才能有用,如下
<!-- 異步--> <task:executor id="executor" pool-size="5"/> <task:annotation-driven executor="executor"/>
但是,加了之后還是沒用
解決
項目的service層是采用接口和接口實現類設計的,一開始我把@Async注解放在了接口實現類的saveProjectHistory()方法上,沒有起作用。但是把@Async注解放在接口的saveProjectHistory()方法定義上就有用了。
至於具體原因,暫時不知道。