Spring的事务传播方式

1、propagation_required

当前方法必须在一个具有事务的上下文中进行,如有客户端有事务在进行,那么被调用端将在该事务中运行,否则的话重新开启一个事务。(如果被调用端发生异常,那么调用端和被调用端事务都将回滚)

就像夫人要当县长夫人,但她不在乎谁是县长,原本的马邦德可以,后来的张麻子也可以,有县长就行。

propagation_required也是,有事务就行,原本有事务运行就用原来的,没有就新开启一个事务。

 

2、propagation_supports

当前方法不必需要具有一个事务上下文,但如果有一个事务的话,它也可以在这个事务中运行

这是一个佛系的夫人,如果有县长她就要,没有她就不要,无所谓

 

3、propagation_mendatory

当前方法必须在一个事务中运行,如果没有事务,将抛出异常

这个夫人就比较轴了,她一定要原来的马邦德县长,没有她就要闹

 

4、propagation_requires_new

不管是否存在事务,都创建一个新的事务,原来的方法挂起,新的方法执行完毕后,继续执行老的事务

这个夫人也很奇怪,她只要当下一任县长

 

5、propagation_nested

如果当前方法正有一个事务在运行中,则该方法应该运行在一个嵌套事务中,被嵌套的事务可以独立于被封装的事务进行提交或回滚。如果封装事务存在,并且在外层事务抛出异常回滚,那么内层事务必须回滚,反之,内层事务并不影响外层事务。如果封装事务不存在,则同propagation_required一样。

这个夫人说:“如果已有了一个马邦德县长,那不够,我还要一个张麻子县长;但如果现在没有县长的话,也行,你们新给我拉一个县长来就好

 

6、propagation_never

当前方法不应该在一个事务中运行如果存在一个事务,则抛出异常

这个夫人坚决不当县长夫人,不然她也要闹

 

7、propagation_not_supported

方法不应在一个事务中运行。如果有一个事务正在运行,他将在运行期被挂起,直到这个事务提交或回滚才恢复执行

posted @ 2021-03-06 17:44  joelhaha  阅读(60)  评论(0)    收藏  举报