@Async 異步背景
新增的數(shù)據(jù)需要分發(fā)給下游業(yè)務系統(tǒng)硫戈,由于下游業(yè)務系統(tǒng)狀態(tài)未知,所以需要異步發(fā)送數(shù)據(jù)給下游業(yè)務系統(tǒng)罚随。
系統(tǒng)生效按鈕--->controller新增-->異步調(diào)用servcie--->數(shù)據(jù)集成
在springboot框架中實現(xiàn)步驟
首先在啟動類上加上@EnableAsync注解開啟項目的異步調(diào)用功能玉工,其次需異步調(diào)用的方法上加上注解 @Async 即可實現(xiàn)方法的異步調(diào)用,再次在contorller使用的異步方法添加@Lazy
第一步:在啟動類上加上 @EnableAsync 注解
第二步添加現(xiàn)場池
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@Configuration
public class TaskExecutorBean {
public TaskExecutor getTaskExecutor() {
return new ThreadPoolTaskExecutor();
}
}
第三步:servcie方法添加異步注解@Async
第四步使用:在contorller中使用異步方法
------------------------------------異常說明------------------------------------
注入到controller中的service類不添加@Lazy拋出異常信息如下:
in its raw version as part of a circular reference, but has eventually been wrap 異常問題
言外之意就是循環(huán)調(diào)用淘菩, controller已經(jīng)為spring的bean了其本身也是多線程的遵班,調(diào)用的servcie是單實例的,使用springboot的異步注解潮改,spring會對 exposedObject 和bean 做判斷狭郑,2個對象是否還相同,由于使用@Async注解后這2個對象不再一樣汇在,必須添加@Lazy方式翰萨,異常問題消失。
參考:https://blog.csdn.net/zhangdeing/article/details/108939877