Spring的事务管理(十二)

17 篇文章 0 订阅

Spring的事务管理

Spring给我们提供了两种编写事务方式,一种是编程式事务,另一只是声明式事务

PlatformTransactionManager:平台事务管理器

平台事务管理器:是一个接口,是Spring用于管理事务的真正对象,并且会根据用户使用的数据库框架不同而切换底层实现。

  • DataSourceTransactionManager:底层使用 JDBC 管理事务
  • HibernateTransactionManager :底层使用 Hibernate 管理事务
TransactionDefinition:事务定义信息
  • 事务定义:用于定义事务的相关信息,隔离级别、超时信息、传播行为、是否只读
TranscationStatus:事务的状态
  • 事务状态:用于记录在事务管理中,事务的状态的对象。
事务管理的API之间的关系

Spring进行事务管理的时候,首先,平台事务管理器根据事务定义信息进行事务的管理,在事务管理的过程中,产生各种状态,将这些状态的信息记录到事务状态的对象中。

Spring事务的传播行为

在实际开发中,如果遇到了特别复杂的业务逻辑,有可能会出现业务层之间的方法互相调用。

事务的传播行为主要用来解决业务层方法相互调用的问题

Spring中提供了七种事务传播行为,共分为三类:

假设在业务层中,有A,B两个方法,这两个方法存在互相调用,可能是A调B,也可能是B调A。

  • 保证多个操作在同一个事务中

    • PROPAGATION_REQUIRED(默认值)

        如果A方法中有事务,B方法调用A方法,那么使用A方法中的事务,将B方法的操作也包含进A事务中来。
      
        如果A方法中没有事务,那么将创建一个新的事务,将A和B的操作一起包含进来。
      
        保证两个方法的操作总是处于同一个事务中。
      
    • PROPAGATION_SUPPORTS:支持事务

        如果A中有事务,使用A中的事务。如果A没有事务,则不使用事务了。
      
    • PROPAGATION_MANDATORY:不支持事务

        如果A中有事务,使用A中的事务。如果A没有事务,抛出异常,不执行了。
      
  • 保证多个操作不在同一个事务中(B调用A)

    • PROPAGATION_REQUIRES_NEW:

        如果A中有事务,将A的(暂停),创建新事物,只包含自身(B)操作。
        
        如果A中没有事务,创建一个新事物,包含自身操作(B)。
      
        保证两个方法的操作,总是不在同一个事务中。
      
    • PROPAGATION_NOT_SUPPORTED:

        如果A中有事务,将A的事务挂起,不使用事务管理了,直接执行操作。
      
    • PROPAGATION_NEVER:

        如果A中有事务,将抛出异常
      
  • 嵌套式事务

    • PROPAGATION_NESTED:嵌套事务

        如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点(存档)。
      
        然后执行B中的操作,如果没有异常,执行通过。
      
        如果有异常,可以选择回滚到最初始的位置,也可以回滚到保存点。
        
        按照事务的顺序进行依次操作,并且为先执行完成的事务记录一个保存点。
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值