主要点
第一点:@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 输出顺序:
标签:info,异步,java,log,阻塞,TestAsyncDemo,方法,public From: https://www.cnblogs.com/canday007/p/17511164.html