欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring的事务传播行为

程序员文章站 2022-06-30 13:23:57
1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。 2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。 3、PROPAGATION_MA ......

 

1、propagation_required:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。

比如说,serviceb.methodb的事务级别定义为propagation_required, 那么由于执行servicea.methoda的时候,servicea.methoda已经起了事务,
这时调用serviceb.methodb,serviceb.methodb看到自己已经运行在servicea.methoda的事务内部,就不再起新的事务。而假如servicea.methoda运行的时候发现自己没有在事务中,
他就会为自己分配一个事务。这样,在servicea.methoda或者在serviceb.methodb内的任何地方出现异常,事务都会被回滚。
即使serviceb.methodb的事务已经被提交,但是servicea.methoda在接下来fail要回滚,serviceb.methodb也要回滚

2、propagation_supports:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。

比如说,执行servicea.methoda的时候,servicea.methoda已经起了事务,这时调用serviceb.methodb,

3、propagation_mandatory:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。serviceb.methodb看到自己已经运行在servicea.methoda的事务内部,就加入该事务。如果servicea.methoda没有创建事务,那么serviceb.methodb久会以非事务执行。
4、propagation_requires_new:创建新事务,无论当前存不存在事务,都创建新事务。
5、propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、propagation_never:以非事务方式执行,如果当前存在事务,则抛出异常。
7、propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作。