主要点

第一点:@Async只能使用到被代理的对象方法上,即代理类的入口方法处,且方法必须是public的。

第二点:事务处理机制

使用@Async异步注解不能和@Transaction事务注解在同一个方法上同时使用,不然事务注解将无效。

要使用事务,需要把事务注解提取到方法里面的子方法上。

 

 

代码实践 demo

controller 层代码:

@GetMapping("/TestAipAsyncDemo")
public void TestAsyncDemo() {
    log.info("TestAipAsyncDemo in");
    binToBinService.TestAsyncDemo("test");
    log.info("TestAipAsyncDemo out");
}

 

   service 层代码:

@Service
@EnableAsync
@Slf4j
public class BinToBinService {

    //异步方法必须为public
    //异步测试demo
    public void TestAsyncDemo(String aaa)
    {
        log.info("TestAsyncDemo in");
        BinToBinService binToBinService = SpringContextUtil.getBean(BinToBinService.class);
        binToBinService.TestAsync(aaa);
        log.info("TestAsyncDemo out");
    }
   
}

最后看log 输出顺序:

 

 

 

 

posted on 2023-06-28 13:31  天空收拾者  阅读(211)  评论(0)    收藏  举报