事务嵌套 、事务挂起、事务传播特性

即多个事务方法嵌套调用时 父子方法的事务如何嵌套、合并、管理

场景 方法啊调用方法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 去捕捉,保证 子事务回滚 父事务不回滚

java嵌套事务不生效_java嵌套事务不生效


可以直接通过脑图了解事务嵌套、事务挂起、和七种事务传播特性