@Async注解失效问题

 

目录

问题描述

 解决方法:


问题描述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值