Spring事务的传播机制

Spring事务的传播机制是指 多个事务方法互相调用时(如当A类a方法调用B类中的b方法时,那么B类中的b方法是按b方法的事务还是A类中a方法的事务来执行),事务如何在这些方法之间进行传播。在事务的管理过程中,传播行为可以控制是否需要创建事务以及事务如何创建。Spring提供了7种不同的传播特性来保证事务的正常执行。

事务的类型

事务的作用

Required(必须的)

默认的传播特性,如果当前没有事务,则新建事务,否则加入这个事务。

例如:a方法调用b方法,如果a方法存在事务,则b方法就按a方法的事务来执行,如果a方法不存在事务,那么b方法就自己新建事务

Supports(支持的)

如果当前存在事务,则加入当前事务,否则以非事务的方式执行,

例如:a方法调用b方法,如果a方法存在事务,那么b方法就按a方法的事务来执行,如果a方法不存在事务,那么b方法就以非事务的方法执行

Mandatory(强制的)

如果当前存在事务,则加入事务,否则抛出异常

例如:a方法存在事务,那么b方法就按a方法的事务来执行,如果a方法不存在事务,那么b方法就抛出异常

Required_new

创建一个新事务,如果当前存在事务,则挂起事务。

例如:如果a方法存在事务,那么a方法自己的事务就会被挂起,然后b方法就会创建自己新的事务来执行。如果a方法不存在事务,b方法也是新建事务来执行

Not_supported

以非事务的方式执行,如果当前存在事务,则挂起事务。

例如L不管a方法存不存在事务,b方法都是以非事务的方式执行

Never

不使用事务,如果当前存在事务,则抛出异常

例如:a方法存在事务,那么b方法会抛出异常。如果a方法不存在事务,那么b方法按非事务的方式执行

Nested

如果当前事务存在,则嵌套在事务中执行,否则和Required的操作一样

例如:a方法调用b方法,如果a方法当前存在事务,则会在a方法的事务执行过程中设置一个保存点,然后b方法会按a方法的事务执行,如果b方法执行失败,则会回滚到之前设置的保存点,否则b方法自己新建事务来执行。

🐂 挂起事务:所谓挂起事务是指,比如有两个方法AB,A方法支持事务,B方法不支持事务,那么A方法中对于数据库的操作是在事务的控制下完成的,而在A方法中调用B方法,那么A方法中开启的事务会挂起,B方法中的数据库操作不在事务的控制下完成,当B方法执行完成返回后,A方法继续在事务的控制下进行相关的数据库操作。

Required和Required_new的区别: Required_new是新建一个事务并且新开启的事务和原有的事务无关,而Required则是如果当前没有事务,则新建事务,否则加入这个事务。

Nested和Required的区别: Required情况下,调用方a存在事务时,则被调用方b和调用方a使用同一个事务,那么被调用方b出现异常时,由于共同使用同一个事务,所以无论是否捕获异常,事务都会回滚,而在Nested下,被调用方b发生异常时,调用方a可以捕获异常,这样只有子事务回滚,父事务不会回滚。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值