千家信息网

Spring事务的隔离级别到底有几种

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章主要介绍"Spring事务的隔离级别到底有几种",在日常操作中,相信很多人在Spring事务的隔离级别到底有几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"S
千家信息网最后更新 2024年11月24日Spring事务的隔离级别到底有几种

这篇文章主要介绍"Spring事务的隔离级别到底有几种",在日常操作中,相信很多人在Spring事务的隔离级别到底有几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Spring事务的隔离级别到底有几种"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

--什么是事务?

事务就是执行操作要么全成功,要么全失败,目的是保持数据的一致性

--事务管理的原理是什么?

AOP

--事务的特性?

ACID

--在Spring中进行事务管理需要配置哪些Bean?

事务管理器,事务定义Bean,事务切面,事务注解支持

--事务定义的目的是什么?

告知事务管理框架,如何进行事务管理。

--有几种定义方式?

xml,注解

--可以定义些什么?

①xml方式:readOnly=""

隔离级别

传播行为

在什么样的异常之下不回滚

定义什么样的情况之下回滚

超时回滚

②注解方式@TransactionDefinition是一个接口

插入源码

public interface TransactionDefinition {
int getPropagationBehavior();
int getIsolationLevel();
int getTimeout();
boolean isReadOnly();
String getName();
}

事务管理器

传播行为7种

隔离级别?种

事务工作的隔离程度

事务的名字

返回是否只读

点开@Transactional 找到 Isolation 一个枚举类型,定义了几种隔离级别

public enum Isolation {
/** * Use the default isolation level of the underlying datastore. * All other levels correspond to the JDBC isolation levels. * @see java.sql.Connection */ DEFAULT(TransactionDefinition.ISOLATION_DEFAULT),
/** * A constant indicating that dirty reads, non-repeatable reads and phantom reads * can occur. This level allows a row changed by one transaction to be read by * another transaction before any changes in that row have been committed * (a "dirty read"). If any of the changes are rolled back, the second * transaction will have retrieved an invalid row. * @see java.sql.Connection#TRANSACTION_READ_UNCOMMITTED */ READ_UNCOMMITTED(TransactionDefinition.ISOLATION_READ_UNCOMMITTED),
/** * A constant indicating that dirty reads are prevented; non-repeatable reads * and phantom reads can occur. This level only prohibits a transaction * from reading a row with uncommitted changes in it. * @see java.sql.Connection#TRANSACTION_READ_COMMITTED */ READ_COMMITTED(TransactionDefinition.ISOLATION_READ_COMMITTED),
/** * A constant indicating that dirty reads and non-repeatable reads are * prevented; phantom reads can occur. This level prohibits a transaction * from reading a row with uncommitted changes in it, and it also prohibits * the situation where one transaction reads a row, a second transaction * alters the row, and the first transaction rereads the row, getting * different values the second time (a "non-repeatable read"). * @see java.sql.Connection#TRANSACTION_REPEATABLE_READ */ REPEATABLE_READ(TransactionDefinition.ISOLATION_REPEATABLE_READ),
/** * A constant indicating that dirty reads, non-repeatable reads and phantom * reads are prevented. This level includes the prohibitions in * {@code ISOLATION_REPEATABLE_READ} and further prohibits the situation * where one transaction reads all rows that satisfy a {@code WHERE} * condition, a second transaction inserts a row that satisfies that * {@code WHERE} condition, and the first transaction rereads for the * same condition, retrieving the additional "phantom" row in the second read. * @see java.sql.Connection#TRANSACTION_SERIALIZABLE */ SERIALIZABLE(TransactionDefinition.ISOLATION_SERIALIZABLE);

private final int value;

Isolation(int value) { this.value = value; }
public int value() { return this.value; }
}

源码中指出:Spring事务的隔离级别有5种

DEFAULT:默认隔离级别,跟随数据库的隔离级别,Mysql默认采用

可重复读,Oracle 默认采用读已提交

READ_UNCOMMITTED:读未提交,最低的隔离级别

READ_COMMITTED:读已提交

REPEATABLE_READ:可重复读

SERIALIZABLE:串行化,最高的隔离级别,事务依次执行,性能差,

时间换空间的概念

--TransactionManager会有很多种吗?

跟随框架的不同,支持不同的事务管理

--什么是本地事务?什么是分布式事务?

本地事务就是数据库事务,分布式事务就是多数据源事务

--Spring事务管理接口

PlatformTransactionManager 开启,提交,回滚

TransactionDefinition 事务定义

TransactionalStatus 事务状态

到此,关于"Spring事务的隔离级别到底有几种"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0