美文网首页spring
Spring 事务机制详解

Spring 事务机制详解

作者: 简_easy | 来源:发表于2018-07-31 14:45 被阅读56次

Spring事务机制主要包括声明式事务和编程式事务

Spring声明式事务时,有一个非常重要的概念就是事务属性。事务属性通常由事务的传播行为,事务的隔离级别,事务的超时值和事务只读标志组成。

Spring在TransactionDefinition接口中定义这些属性,以供PlatfromTransactionManager使用, PlatfromTransactionManager是spring事务管理的核心接口。

public interface TransactionDefinition { 

   int getPropagationBehavior();//返回事务的传播行为。 

   int getIsolationLevel();//返回事务的隔离级别,事务管理器根据它来控制另外一个事务可以     看到本事务内的哪些数据。 

   int getTimeout();//返回事务必须在多少秒内完成。 

   boolean isReadOnly();//事务是否只读,事务管理器能够根据这个返回值进行优化,确保事     务是只读的。 

}

1. TransactionDefinition接口中定义五个隔离级别:

ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应;

ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻像读。

ISOLATION_READ_COMMITTED  保证事务A提交后 事务B才可以读取。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻像读。

ISOLATION_REPEATABLE_READ  这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读。

ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻像读。

名词解释:

Dirty reads(脏读): 事务B读了事务A还没有提交的数据 然而事务A失败了

 non-repeatable reads(数据不可重复读):事务A前后两次读取数据之间事务B修改了此数据,导致两次读取不一致。 

 phantom reads(幻象读数据):事务A前后两次读取数据集之间事务B改变了此数据集条件字段的值 导致取出的数据不一致。

2. 在TransactionDefinition接口中定义了七个事务传播行为:

(1)PROPAGATION_REQUIRED 如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。

(2)PROPAGATION_SUPPORTS 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

(3)PROPAGATION_MANDATORY 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

(4)PROPAGATION_REQUIRES_NEW 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

(5)PROPAGATION_NOT_SUPPORTED  总是非事务地执行,并挂起任何存在的事务。

(6)PROPAGATION_NEVER 总是非事务地执行,如果存在一个活动事务,则抛出异常;

(7)PROPAGATION_NESTED如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。《这是一个嵌套事务,使用JDBC 3.0驱动时,仅仅支持DataSourceTransactionManager作为事务管理器。需要JDBC 驱动的java.sql.Savepoint类。有一些JTA的事务管理器实现可能也提供了同样的功能。使用PROPAGATION_NESTED,还需要把PlatformTransactionManager的nestedTransactionAllowed属性设为true;而nestedTransactionAllowed属性值默认为false;》

嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。

相关文章

  • Spring之事务管理

    Spring事务管理(详解+实例)Spring详解(八)------事务管理 一. 概念 事务(Transacti...

  • Spring 事务机制详解

    Spring事务机制主要包括声明式事务和编程式事务 Spring声明式事务时,有一个非常重要的概念就是事务属性。事...

  • ☆Spring 事务机制详解

    Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,...

  • Spring事务

    JerryTse—— Spring事务传播行为详解

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

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

  • 4.Spring Boot的事务机制及缓存

    1.Spring Boot事务机制 所有的数据访问技术都有事务处理机制,而Spring的事务机制是用统一的机制来处...

  • Spring中的AOP事务

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

  • 2018-06-09

    spring源码分析(八) 目录五、源码分析--6、Spring 事务原理详解----6.1、什么是事务(Tran...

  • 问题记录

    面试题记录 spring spring事务传播机制和隔离级别? spring支持的事务类型? 什么是 Spring...

  • Spring 事务

    ** 但是Spring事务有自己的特点,也就是事务传播机制。** ** 所谓事务传播机制,也就是在事务在多个...

网友评论

    本文标题:Spring 事务机制详解

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