事务嵌套 、事务挂起、事务传播特性
即多个事务方法嵌套调用时 父子方法的事务如何嵌套、合并、管理
场景 方法啊调用方法b 方法b是事务方法 方法a不确定时(a可能有事务注解)
具体七种
propagation_requierd 默认
如果父方法没有事务,子方法就建立一个事务。
如果父方法有事务,子方法就融入这个事务里。
propagation_supports
如果父方法有事务,子方法就融入这个事务里。
如果父方法没有事务,子方法也不建立主动事务,就以非事务方法执行。
propagation_mandatory
如果父方法有事务
子方法就融入这个事务里
如果父方法没有事务
调用子事务方法时抛出异常
propagation_required_new
如果父方法有事务
子方法把父方法的事务挂起
然后执行子方法
如果父方法没有事务
子方法主动新建事务
propagation_not_supported
如果父方法没有事务
子方法也不建立主动事务
就以非事务方法执行
如果父方法有事务
子方法把父方法的事务挂起
然后执行子方法
propagation_never
如果父方法没有事务
子方法也不建立主动事务
就以非事务方法执行
如果父方法有事务
调用子事务方法时抛出异常
propagation_nested
如果父方法没有事务
子方法就建立一个事务
如果父方法有事务
则事务嵌套执行
事务挂起(事务方法a调用事务方法b)
(事务的创建,挂起,回归,提交)
挂起时,事务方法a在调用方法b时,事务a会被挂起,
事务a里面的属性值,中间状态值会被缓存到 SuspendedResourcesHolder 这个Bean对象里
然后进入方法b,去执行方法b
方法b执行完以后,再回到方法a,去恢复事务a 、然后完成事务
事务嵌套(两个事务方法嵌套使用时 propagation_nested)
1、父事务回滚,子事务也回滚
2、子事务回滚,父事务也回滚。在子事务里,可以通过 Try catch 去捕捉,保证 子事务回滚 父事务不回滚
可以直接通过脑图了解事务嵌套、事务挂起、和七种事务传播特性