目录
问题描述
Async注解其实是多线程封装的,使用时在启动类加上@EnableAsync,需要执行异步方法上加入 @Async注解,如果异步注解写当前自己类,有可能aop 会失效,无法拦截注解,最终导致异步失效,如下:
public class GetTestAsyncService implements IBusinessService {
/**
* 交易商基本信息
*/
@Override
public void doVerify(ServiceHandlerContext context) {
}
@Override
public void doWork(ServiceHandlerContext context) {
log.debug("01");
// new Thread(new Runnable() {
// @Override
// public void run() {
// testAsync();
// }
// });
testAsync();
testAsync1();
log.debug("06");
//可以通过code查询也可以通过名字查询,两个不需要同时查询
ServiceHandlerContextExt.createSuccessResponseWithMsg(this,context,"结束");
}
@Async
public void testAsync() {
log.debug("02");
try {
Thread.sleep(3000);
}catch (Exception e){
log.error("....");
}
log.debug("03");
}
@Async
public void testAsync1() {
log.debug("04");
try {
Thread.sleep(3000);
}catch (Exception e){
log.error("....");
}
log.debug("05");
}
}
结果:
[2022-10-17 10:42:30.146] [日志ID:8a7f848783e3d01d0183e3d23cb90002] [DEBUG] [com.cottoneasy.finance.traderInfo.service.GetTestAsyncService:37]-01
[2022-10-17 10:42:30.146] [日志ID:8a7f848783e3d01d0183e3d23cb90002] [DEBUG] [com.cottoneasy.finance.traderInfo.service.GetTestAsyncService:52]-02
[2022-10-17 10:42:33.152] [日志ID:8a7f848783e3d01d0183e3d23cb90002] [DEBUG] [com.cottoneasy.finance.traderInfo.service.GetTestAsyncService:58]-03
[2022-10-17 10:42:33.152] [日志ID:8a7f848783e3d01d0183e3d23cb90002] [DEBUG] [com.cottoneasy.finance.traderInfo.service.GetTestAsyncService:62]-04
[2022-10-17 10:42:36.155] [日志ID:8a7f848783e3d01d0183e3d23cb90002] [DEBUG] [com.cottoneasy.finance.traderInfo.service.GetTestAsyncService:68]-05
[2022-10-17 10:42:36.155] [日志ID:8a7f848783e3d01d0183e3d23cb90002] [DEBUG] [com.cottoneasy.finance.traderInfo.service.GetTestAsyncService:46]-06.........
可以看出来异步注解没有起到它的作用
解决方法:
需要将异步的代码单独抽取成一个类调用接口,如下:
@Component
@Slf4j
public class AsyncCommon {
@Async
public void testAsync() {
log.debug("02");
try {
Thread.sleep(3000);
}catch (Exception e){
log.error("....");
}
log.debug("03");
}
}
执行结果:从打印结果可以看出Async注解生效了
[2022-10-17 12:05:34.415] [日志ID:8a7f848783e408cb0183e41e479a0002] [DEBUG] 执行[org.harry.dandelion.framework.core.service.IBusinessService:37]-执行业务逻辑服务...
[2022-10-17 12:05:34.416] [日志ID:8a7f848783e408cb0183e41e479a0002] [DEBUG] [com.cottoneasy.finance.traderInfo.service.GetTestAsyncService:39]-01
[2022-10-17 12:05:34.416] [日志ID:8a7f848783e408cb0183e41e479a0002] [DEBUG] [com.cottoneasy.finance.traderInfo.service.GetTestAsyncService:41]-04
[2022-10-17 12:05:34.416] [日志ID:8a7f848783e408cb0183e41e479a0002] [DEBUG] [org.harry.dandelion.framework.core.service.IBusinessService:39]-完成业务逻辑服务...
[2022-10-17 12:05:34.416] [日志ID:] [DEBUG] [com.cottoneasy.finance.traderInfo.service.AsyncCommon:17]-02[2022-10-17 12:05:37.428] [日志ID:] [DEBUG] [com.cottoneasy.finance.traderInfo.service.AsyncCommon:23]-03