Spring事务面试知识清单(内含七种事务隔离级别的快速记忆方法)

本文详细介绍了Spring事务中的五种隔离级别,包括如何避免脏读、不可重复读和幻读问题。同时,阐述了七种事务传播行为,如PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS等,以及事务管理的三大接口PlatformTransactionManager、TransactionDefinition和TransactionStatus的作用。文章还提及了编程式和声明式事务的管理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

五种隔离级别(其实是四种,但是有一种默认的也要单独记)

首先复习一下事务的四个特性ACID:

ACID特性:原子性(操作不可分割),一致性,隔离性(多个事务并发时不会导致数据不一致),持久性(对数据的修改是永久的)
在这里插入图片描述
脏读:一个事务读取到另一事务未提交的更新数据

不可重复读:一个事务期间两次读到同一个数据不一致

幻读:读取的数据的行数有问题

可重复读:当使用可重复读隔离级别时,在事务执行期间会锁定该事务以任何方式引用的所有行。因此,如果在同一个事务中发出同一个SELECT语句两次或更多次,那么产生的结果数据集总是相同的。因此,使用可重复读隔离级别的事务可以多次检索同一行集,并对它们执行任意操作,直到提交或回滚操作终止该事务。

如何解决幻读:间隙锁

七种事务传播行为

保证在同一个事务中
PROPAGATION_REQUIRED:支持当前事务,如果不存在 就新建一个(默认)
required需要事务,没有就自己建一个。
PROPAGATION_SUPPORTS: 支持当前事务,如果不存在,就不使用事务
support支持,说明不强制
PROPAGATION_MANDATORY :支持当前事务,如果不存在,抛出异常
mandatory 强制的,你没有我就抛异常了啊!

保证不在同一个事务中
PROPAGATION_REQUIRES_NEW: 如果有事务存在,挂起当前事务,创建一个新的事务
required_new需要新的
PROPAGATION_NOT_SUPPORTED :以非事务方式运行,如果有事务存在,挂起当前事务
不支持事务,但我也只是不支持,你有我就挂起
PROPAGATION_NEVER: 以非事务方式运行,如果有事务存在,抛出异常
不支持就是不支持,没得商量!

嵌套执行事务
PROPAGATION_NESTED:如果当前事务存在,则嵌套事务执行
正如其名,可以嵌套~

事务管理的三种接口

PlatformTransactionManager事务管理器
这个接口提供了多种事务管理器,如为JDBC提供的,为Hibernate提供的,为JPA提供的
接口里面定义了三个方法:
获得事务,提交事务,回滚事务。

TransactionDefinition 事务定义信息,比如事务超时时间、隔离级别、传播行为,回滚规则,是否只读

TransactionStatus 事务运行状态接口,提供了一些方法来获取事务相应的状态比如是否新事务、是否可以回滚等等。
事务管理器接口通过后两个接口来进行事务管理。

编程式事务(比如用xml)

声明式事务(用注解)

后两个没什么好说的,代码网上非常多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值