`

spring事务管理之TransactionDefinition

阅读更多

2.  TransactionDefinition

TransactionDefinition      事务定义信息: (配置信息来自xml配置文件注解)

         包括事务的隔离级别,事务的传播特性,事务超时时间,事务只读特性.

         这个接口中有很多常量:

         * ISOLATION_xxx 事务隔离级别

         * PROPAGATION_xxx  事务传播行为

         * int getTimeout()  获得超时信息

         * boolean isReadOnly()  判断事务是否只读

2.1. 事务隔离级别

事务四大特性 : ACID  原子性、一致性、隔离性、持久性

隔离性引发并发问题:脏读、不可重复读、虚读

         * 脏读一个事务读取另一个事务未提交数据

         * 不可重复读一个事务读取另一个事务已经提交 update 数据

         * 虚读  一个事务读取另一个事务已经提交 insert 数据

事务隔离级别为了解决事务隔离性引发问题

         * DEFAULT 默认级别  mysql REPEATABLE_READ oracle READ_COMMITTED

         * READ_UNCOMMITED  导致所有问题发生

         * READ_COMMITTED 防止脏读、发生不可重复读和虚读

         * REPEATABLE_READ 防止脏读、不可重复读,发生虚读

         * SERIALIZABLE 防止所有并发问题

2.2      .事务的传播行为

 

传播行为解决问题:一个业务层事务调用另一个业务层事务,事务之间关系如何处理

 

事务的传播行为在jdbc规范中是没有定义的,jdbc规范只定义了事务的隔离级别.

为什么要有事务的传播行为,就是为了方便开发.

 

实际开发中的问题:会不会业务层方法之间的互相调用,这是种情况下会发生的,例如:

删除客户的同时,也要删除与客户相关联的订单.这时就会在CustomerServicedeleteCustomer方法中调用OrderSerivce中的deleteOrder方法.

如果订单删除失败了,那么就不应该删除客户,所以这两个操作必须放到同一个事务中.

 

另一种情况:订单删除失败了,仍然要把客户删除,这两个操作也需要事务

 

传播行为解决的问题是:一个业务层的事务,调用另一个业务层事务,事务之间的关系如何处理.

七种传播行为

Spring中定义了七中事务传播行为:

1.      PROPAGATION_REQUIRED      支持当前事务,如果不存在就新建一个

         * 删除客户时删除订单,处于同一个事务,如果删除订单失败,删除客户也要回滚

2.      PROPAGATION_SUPPORTS      支持当前事务,如果不存在,就不使用事务

         *删除客户时删除订单,如果删除客户时没有开启事务,那么删除订单也不使用事务.

3.    PROPAGATION_MANDATORY支持当前事务,如果不存在,抛出异常

         *删除客户时删除订单,如果在删除订单时没开事务,则抛出异常.

        

4.      PROPAGATION_REQUIRES_NEW    如果有事务存在,挂起当前事务,创建一个新的事务

         * 生成订单,发送通知邮件,通知邮件会创建一个新的事务,如果邮件失败,不影  响订单生成事务.

5.      PROPAGATION_NOT_SUPPORTED  以非事务方式运行,如果有事务存在,挂起当前事务

6.      PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常

7.      PROPAGATION_NESTED  如果当前事务存在,则嵌套事务执行

         * 依赖于 JDBC3.0 提供 SavePoint 技术

         * 删除客户删除订单, 在删除客户后,设置SavePoint, 执行删除订单,删除订单           和删除客户在同一个事务,删除订单失败,事务回滚 SavePoint , 由用户控制是事务          提交还是回滚

 

重点:

PROPAGATION_REQUIRED 一个事务,要么都成功,要么都失败

PROPAGATION_REQUIRES_NEW 两个不同事务,彼此之间没有关系  一个事务失败了不影响另一个事务

PROPAGATION_NESTED  一个事务,A事务调用 B过程中, B失败了,回滚事务到之前SavePoint 用户可以选择提交事务或者回滚事务

分享到:
评论

相关推荐

    spring 自定义事务管理器,编程式事务,声明式事务@Transactional使用

    在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。本教程将深入探讨如何在Spring中实现自定义事务管理器...这将加深你对Spring事务管理的理解,帮助你在实际项目中更加熟练地运用这些技术。

    spring事务管理

    ### Spring事务管理详解 #### 一、Spring事务管理概述 Spring框架提供了强大的事务管理功能,使得开发者能够更方便地管理应用程序中的事务。Spring事务管理主要包括两种类型:编程式事务管理和声明式事务管理。 -...

    spring事务操作试验

    "spring事务操作主要对象.png"可能展示了Spring事务管理的关键组件,如TransactionDefinition(定义事务属性)、PlatformTransactionManager(事务管理器接口)、TransactionStatus(事务状态对象)等。这些对象协同...

    详细介绍Spring事务管理

    ### Spring事务管理详解 #### 一、Spring事务管理的重要性及必要性 在现代软件开发中,事务管理是一项至关重要的技术,特别是在涉及数据库操作时。事务能够确保一系列操作要么全部成功,要么全部失败,这对于保持...

    Spring事务管理4种方式

    本文将详细介绍Spring事务管理的四种方式:编程式事务管理、声明式事务管理、PlatformTransactionManager接口以及TransactionTemplate。 1. **编程式事务管理**:这是一种手动控制事务的方式,通过在代码中调用`...

    Spring的事务管理小案例

    在本文中,我们将深入探讨Spring框架中的事务管理。Spring是一个广泛应用的Java企业级应用开发框架,它提供...如果你想要深入了解,可以参考提供的博客链接或其他相关资料,进一步学习Spring事务管理的细节和最佳实践。

    Spring事务原理、Spring事务配置的五种方式

    Spring事务原理是指Spring框架中的一种机制,用于管理事务,并提供了多种配置方式。事务是指一系列的操作,作为一个整体执行,如果其中某个操作失败,整个事务将回滚。Spring事务原理围绕着两个核心:...

    基于java的企业级应用开发:Spring事务管理概述.ppt

    PlatformTransactionManager接口是Spring事务管理的核心,它负责事务的创建、提交和回滚。这个接口定义了以下三个基本操作: - `getTransaction(TransactionDefinition definition)`:根据传入的...

    Spring事务处理-ThreadLocal的使用

    Spring事务处理是其核心特性之一,确保了数据的一致性和完整性。本篇文章将聚焦于Spring事务处理中ThreadLocal的使用,以及如何通过源码理解和应用这个工具。 首先,了解Spring事务管理的基本概念。在多线程环境中...

    Spring 框架的事务管理及应用

    Spring框架通过提供一系列事务管理相关的类,如`TransactionDefinition`、`TransactionStatus`和`PlatformTransactionManager`等,简化了编程式事务管理的过程。 ```java // 假设transactionManager是已经配置好的...

    spring学习事务源码

    首先,Spring事务管理有两种主要模式:编程式事务管理和声明式事务管理。编程式事务管理通过调用`PlatformTransactionManager`接口提供的方法进行显式控制,如`beginTransaction()`, `commit()`, 和`rollback()`。...

    深入理解spring的事务管理机制

    Spring事务管理的核心是基于AOP(面向切面编程)来实现的。 **Spring事务的本质**实际上是依赖于底层数据库提供的事务支持。如果没有数据库层面的支持,Spring无法单独实现事务的功能。在传统的JDBC操作中,如果想...

    spring_如何管理事务的

    #### 一、Spring事务管理概述 Spring框架为开发者提供了一套强大的事务管理机制,它简化了应用程序中的事务控制逻辑,使得开发人员能够更加专注于业务逻辑的编写,而不是繁琐的事务管理代码。Spring支持两种类型的...

    Spring事务详细讲解

    Spring事务详细讲解 在 Spring 框架中,事务管理扮演着非常重要的角色。Spring 声明式事务让我们从复杂的事务处理中得到解脱,使得我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。再也无需要...

    Spring事务管理的几种配置方式,

    在Spring框架中,事务管理是核心功能之一,它确保了数据操作的一致性和完整性。Spring提供了多种事务管理配置方式,适合不同的应用场景。本篇将详细讲解Spring中的事务管理配置,帮助初学者理解并掌握这一重要概念。...

    全面分析 Spring 的编程式事务管理及声明式事务管理

    相比之下,声明式事务管理更加简洁,易于维护,是大多数项目推荐的方式。理解并熟练掌握这两种事务管理方式,对于优化应用程序的稳定性和可维护性至关重要。在实际应用中,应根据项目的具体需求选择合适的方法。

    Spring中事务的传播属性详解

    Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。其中,声明式事务管理因其简洁性和易用性而更受欢迎。本文将详细介绍Spring中的事务传播属性,并通过具体的例子来解释每种传播行为的特点。 #### ...

    全面分析Spring的编程式事务管理与声明式事务管理.doc

    通过本文的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之。 一、事务管理的重要性 事务管理对于企业应用至关重要。它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台...

Global site tag (gtag.js) - Google Analytics