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种

隔离级别?种

事务工作的隔离程度

事务的名字

返回是否只读

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

点开@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种

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

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

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

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

READ_COMMITTED:读已提交

REPEATABLE_READ:可重复读

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

时间换空间的概念

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

--TransactionManager会有很多种吗?

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

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

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

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

--Spring事务管理接口

PlatformTransactionManager 开启,提交,回滚

TransactionDefinition 事务定义

TransactionalStatus   事务状态

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