Spring的7种事务传播行为


事务传播行为指的是一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。

比如说,有一个A方法,里面调用了B方法,当执行到B方法时,是应该在当前事务里执行,还是重新打开一个事务来执行,这是由B方法的事务传播行为决定的

七种事务传播行为

PROPAGATION_REQUIRED 表明当前方法一定要在事务中执行,如果有事务存在,就在当前事务中执行;如果没有,则启动一个新的业务执行
PROPAGATION_SUPPORTS 表明当前方法可以不在事务中执行,如果有事务存在,才会在事务中执行,否则就会以非事务的方式执行
PROPAGATION_MANDATORY 表明当前方法一定要在事务中执行,如果不存在事务,就会抛出一个异常
PROPAGATION_REQUIRED_NEW 表明当前方法必须运行在自己的事务中,如果当前事务存在的话,会将原来事务挂起,然后启动新事务来执行这个方法,方法执行完成后,才会将原来的事务恢复,原来的事务和新启动的事务是互不干扰的
PROPAGATION_NOT_SUPPORTED 表明当前方法不在事务中运行,如果当前事务存在的话,会将原来事务挂起,然后以非事务的方式执行完当前方法,然后再恢复原有事务
PROPAGATION_NEVER 表明当前方法不能运行在事务中,如果当前事务存在,则会抛出异常
PROPAGATION_NESTED 表明嵌套事务,如果当前事务存在的话,会在事务内部开启一个事务,并且原来事务不会被挂起,也就是说,外部事务和内部事务是有关系的,外部事务的回滚会导致内部事务的回滚

主要就是PROPAGATION_REQUIRED_NEWPROPAGATION_NESTED的区别:

两者都是嵌套事务,区别就是,前者的外部事务和内部事务是不关联的,外部事务的无法回滚和提交内部事务,也就是说外部事务的执行成功与否不影响内部事务的回滚或提交;而后者的外部事务与内部事务是相关联的,外部事务的执行失败会导致内部事务的回滚

发布了60 篇原创文章 · 获赞 7 · 访问量 3864

猜你喜欢

转载自blog.csdn.net/SCUTJAY/article/details/104675748