美文网首页
Spring 事务初识(1)2018-08-22

Spring 事务初识(1)2018-08-22

作者: Seetheworl_6675 | 来源:发表于2018-08-22 23:08 被阅读0次
一:事务的4个限定属性(ACID)

1、原子性(Atomic) :对数据的修改要么全部执行,要么全部不执行。
2、一致性(Consistent) :在事务执行前后,数据状态保持一致性。
3、隔离性(Isolated) :一个事务的处理不能影响另一个事务的处理。
4、持续性(Durable) :事务处理结束,其效果在数据库中持久化。

二:隔离性(Isolated)细分4个隔离级别:

1、读未提交(read uncommitted):一个事务可以读取另一个事2务没有提交的数据。存在脏读、不可重复读、幻读的问题。
2、读提交(Read Committed):一个事务的操作结果只有在该事务提交之后,另一个事务才能读取到。避免另脏读,存在不可重复读、幻读的问题。
3、可重复读(Repeatable Read):保证在一个事务中,对同一笔数据的读取结果是相同的。避免另脏读、不可重复读,存在幻读的问题。
4、序列化读(Serializable):所以的事务是按顺序执行的。

脏读、不可重复读、幻读:
脏读:一个事务读取了,另一个事务为提交的数据
不可重复读:一个事务内对同一笔数据的多次读取结果不同,不可重复读的重点是修改。
幻读:同样一笔查询在整个事务过程中多次执行后,查询所得的结果集是不一样的。幻读针对的是多笔记录。幻读的重点在于新增或者删除 (数据条数变化)

三、Spring事务的主要接口:

PlatformTransactionManager:界定事务的边界

public interface PlatformTransactionManager {
    //获取事务
    TransactionStatus getTransaction(@Nullable TransactionDefinition var1) throws TransactionException;
    //提交
    void commit(TransactionStatus var1) throws TransactionException;
    //回滚
    void rollback(TransactionStatus var1) throws TransactionException;
}

TransactionDefinition:负责定义事务的相关属性

public interface TransactionDefinition {
    //获取事务传播类型
    int getPropagationBehavior();

    //获取事务隔离级别
    int getIsolationLevel();

    //获取事务超时时间
    int getTimeout();

    //事务的只读性
    boolean isReadOnly();

    //获取事务名称
    String getName();

}

TransactionStatus:事务开启之后后事务结束期间的事务状态

public interface TransactionStatus extends SavepointManager, Flushable {
  // 是否是新的事物
    boolean isNewTransaction();
    // 是否有恢复点
    boolean hasSavepoint();
    //标记回滚当前事务
    void setRollbackOnly();
    //判断当前事务是不是标记为回滚
    boolean isRollbackOnly();
    //刷新会话到数据库
    void flush();
    // 是否已完成
    boolean isCompleted();
}

四:事务属性:
事务的传播属性:

1、TransactionDefinition.PROPAGATION_REQUIRED: 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

2、TransactionDefinition.PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

3、TransactionDefinition.PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
不支持当前事务的情况:

4、TransactionDefinition.PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。

5、TransactionDefinition.PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。

6、TransactionDefinition.PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。
其他情况:

7、TransactionDefinition.PROPAGATION_NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

事务的隔离属性:

1、TransactionDefinition.ISOLATION_DEFAULT: 使用后端数据库默认的隔离级别,Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别.
TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读

2、TransactionDefinition.ISOLATION_READ_COMMITTED: 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生

3、TransactionDefinition.ISOLATION_REPEATABLE_READ: 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。

4、TransactionDefinition.ISOLATION_SERIALIZABLE: 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

事务超时属性(一个事务允许执行的最长时间)

所谓事务超时,就是指一个事务所允许执行的最长时间,如果超过该时间限制但事务还没有完成,则自动回滚事务。在 TransactionDefinition 中以 int 的值来表示超时时间,其单位是秒。

事务只读属性(对事物资源是否执行只读操作)

事务的只读属性是指,对事务性资源进行只读操作或者是读写操作。所谓事务性资源就是指那些被事务管理的资源,比如数据源、 JMS 资源,以及自定义的事务性资源等等。如果确定只对事务性资源进行只读操作,那么我们可以将事务标志为只读的,以提高事务处理的性能。在 TransactionDefinition 中以 boolean 类型来表示该事务是否只读。

相关文章

  • Spring 事务初识(1)2018-08-22

    一:事务的4个限定属性(ACID) 1、原子性(Atomic) :对数据的修改要么全部执行,要么全部不执行。2、一...

  • Spring 事务实现分析

    1. Spring 事务简介 Spring 本身并不实现事务,Spring事务 的本质 还是 底层数据库 对事务的...

  • 程序员之Spring

    1. Spring事务 spring的事务实现原理Spring事务将connection放入到当前线程的threa...

  • Spring的事务机制解析一

    一Spring事务的种类 1.声明式事务 2.编程式事务 二Spring事务的具体描述 (一)声明式事务 1.声明...

  • 面试题总结 —— JAVA高级工程师

    一、1、Spring 事务的隔离性,并说说每个隔离性的区别 解答:Spring事务详解 2、Spring事务的传播...

  • Spring中的AOP事务

    【目录】1 Spring的事务管理机制2 Spring事务管理两种方式 1 Spring的事务管理机制 Sprin...

  • SSM spring 2

    1 Spring 事务实现方式、事务的传播机制、默认的事务类别 Spring事务的1+3种实现方式、7种传播行为、...

  • spring声明式事务

    1.数据库ACID、事务隔离级别 2.spring事务相关的API 3.spring声明式事务 4.spring事...

  • Spring的事务处理

    Spring的事务处理 1. 什么是事务? 2. 如何控制事务 3.Spring控制事务的开发 1. 原始对象 2...

  • spring事务

    1、spring事务管理器PlatformTransactionManager 1.1、没有spring事务管理器...

网友评论

      本文标题:Spring 事务初识(1)2018-08-22

      本文链接:https://www.haomeiwen.com/subject/pufuiftx.html