不完全失效情景
1.1调用
事物A方法调用事物B方法,B方法为异步@Async方法(返回值void),B方法报错。
1.2结果
如图:A方法commit了,B方法执行中报错了,给了个rollback。分明是两个事物了。
于是A没有回滚,B回滚了。
2.1继续测试
将B方法返回值由void改为Future,并在A方法里get一下。
2.2测试结果
A、B方法均成功回滚
现象
此处@Async方法B的返回值为void时,抛异常B回滚,A不会回滚;返回值由void改为Future,A、B均回滚。此时事物处于不完全失效状态!
结论
1.@Async方法返回值为void时,被其它事物方法调用的时候,他们的事物是分开管理的。
2.@Async方法返回值为Future,并被其它事物方法get时,此时调用方法和被调用方法才处于一个事物中。
提示
此处由现象归纳的结论,水平有限,无法探求本质提供凭证,诸君慎取!