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

浙公网安备 33010602011771号