【学习笔记】Spring事务回滚七大传播特性

本文详细介绍了Spring框架中事务的七大传播特性,包括REQUIRED、REQUIRES_NEW、NESTED等,以及它们在事务处理中的作用。通过这些特性,开发者可以灵活控制方法在事务中的执行方式,确保数据的一致性和完整性。同时,文章还概述了Spring事务管理的实现机制,涉及到事务的开启、提交和回滚过程。
摘要由CSDN通过智能技术生成

Spring事务回滚七大传播特性

传播特性解释
REQUIRED表示当前方法必须在一个具有事务的上下文中运行,如有客户端有事务在进行,那么被调用端将在该事务中运行,否则的话重新开启一个事务。(如果被调用端发生异常,那么调用端和被调用端事务都将回滚)
REQUIRES_NEW表示当前方法必须运行在它自己的事务中。一个新的事务将启动,而且如果有一个现有的事务在运行的话,则这个方法将在运行期被挂起,直到新的事务提交或者回滚才恢复执行。
NESTED表示如果当前方法正有一个事务在运行中,则该方法应该运行在一个嵌套事务中,被嵌套的事务可以独立于被封装的事务中进行提交或者回滚。如果封装事务存在,并且外层事务抛出异常回滚,那么内层事务必须回滚,反之,内层事务并不影响外层事务。如果封装事务不存在,则同REQUIRED的一样
SUPPORTS表示当前方法不必需要具有一个事务上下文,但是如果有一个事务的话,它也可以在这个事务中运行
NOT_SUPPORTED表示该方法不应该在一个事务中运行。如果有一个事务正在运行,他将在运行期被挂起,直到这个事务提交或者回滚才恢复执行
NEVER表示当方法务不应该在一个事务中运行,如果存在一个事务,则抛出异常
MANDATORY表示当前方法必须在一个事务中运行,如果没有事务,将抛出异常

spring的事务管理是如何实现的?

答:spring的事务是由aop来实现的,首先要生成具体的代理对象,然后按照aop的整套流程来执行具体的操作逻辑,正常情况下要通过通知来完成核心功能,但是事务不是通过通知来实现的,而是通过一个TransactionInterceptor来实现的, 然后调用invoke来实现具体的逻辑。

  1. 先做准备工作,解析各个方法上事务相关的属性,根据具体的属性来判断是否开始新事务
  2. 当需要开启的时候,获取数据库连接,关闭自动提交功能,开起事务
  3. 执行具体的sql逻辑操作
  4. 在操作过程中,如果执行失败了,那么会通过completeTransactionAfterThrowing看来完成事务的回滚操作, 回滚的具体逻辑是通过doRollBack方法来实现的,实现的时候也是要先获取连接对象,通过连接对象来回滚
  5. 如果执行过程中,没有任何意外情况的发生,那么通过commitTransactionAfterReturning来完成事务的提交操作, 提交的具体逻辑是通过doCommit方法来实现的,实现的时候也是要获取连接,通过连接对象来提交
  6. 当事务执行完毕之后需要清除相关的事务信息cleanupTransactionInfo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值