`

spring事务

    博客分类:
  • java
阅读更多
Spring事务-(1)2008-07-25 11:37Spring事务-(1)Spring的事务管理是其非常重要的一个方面,Spring的应用主要集中在Ioc/AOP/DAO/事务四个方面。这部分内容比较抽象,需要花费大篇幅来写。一、事务控制的基本知识不管是什么事务,必须先对数据库的事务概念有个明确认识才行。首先先简单介绍下数据库的事务。事务的概念:事务是一组原子性操作的工作单元,这组工作单元要么执行成功,要么不成功。事务有四个属性--原子性、一致性、独立性和持久性(CAID),所有这些方面都是依靠事务资源去维护。事务隔离:SQL 标准用三个必须在并行的事务之间避免的现象定义了四个级别的事务隔离。 这些不希望发生的现象是:脏读(dirty reads)一个事务读取了另一个未提交的并行事务写的数据。不可重复读(non-repeatable reads)一个事务重新读取前面读取过的数据, 发现该数据已经被另一个已提交的事务修改过。幻读(phantom read)一个事务重新执行一个查询,返回一套符合查询条件的行, 发现这些行因为其他最近提交的事务而发生了改变。这四种隔离级别和对应的行为如下表:
隔离级别             脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read)
读未提交(Read uncommitted) 可能          可能                          可能
读已提交(Read committed) 不可能           可能                         可能
可重复读(Repeatable read) 不可能          不可能                       可能
可串行化(Serializable ) 不可能            不可能                      不可能
Spring事务包中的TransactionDefinition接口有对应的隔离级别的定义。高清楚以上的概念,才能更好理解Spring的事务管理。二、从编程的角度认识事务和数据库事务概念几乎完全一样:事务是一种机制,把组成的多个操作视为一个操作单元进行处理,这个单元要么全部执行成功,要么全部不执行。在事务中,涉及的操作可能依赖于很多不同的数据库和服务器。从程序角度考虑,事务可以分为两大类:一种是本地事务,一种是全局事务(也叫分布式事务)。本地事务:是针对某个独立的事务资源(如JDBC)操作的事务。全局事务:是协同或横跨多个资源(如JDBC连接、数据库等)操作的事务(上下文),多个资源协作是由事务管理器来完成的。事务源:是可以绑定事务操作的资源。事务的概念最初来自数据库的操作,事务的资源也仅限于数据库。但编程中的事务,事务源很广泛,不但可以包含数据库,还可以包含打印机等。本地事务和全局事务有很大的区别:全局事务的控制非常复杂,全局事务使用两阶段提交协议(2PC)来提交资源源的变化。阶段一请求所有资源准备实现改变;阶段二请求做实际的改变。
全局事务ID(XID)是用于跟踪所有分布式事务相关的改变。全局事务的实现需要由专门的应用服务器或者容器去实现。在Java中,可以借助实现了Java Transaction API的库来进行全局事务控制。JDBC与JTAJDBC是Java database connectivity 的缩写,意思是Java数据库连接。一般本地事务是与一个数据库连接相关的,因此Java中常称本地事务为JDBC事务。JDBC本身提供了简单的本地事务控制,可以满足针对一个JDBC连接事务的需求。JTA是Java Transaction API的缩写,意思是Java事务API,这是一种组复杂事务控制接口,这组接口作为J2EE规范暴露给容器开发商,一般都由J2EE容器来实现。Spring很牛,也实现了这组API,使得任何应用使用JTA事务变得更容易。三、认识Spring的事务包的APISpring对事务的控制的API全部位于org.springframework.transaction包下面,其中出去异常定义的类外,仅有四个接口,这四个接口是Spring操作事务的核心,下面一一介绍:org.springframework.transactionInterfaces         PlatformTransactionManager         SavepointManager         TransactionDefinition         TransactionStatus Exceptions         CannotCreateTransactionException        HeuristicCompletionException        IllegalTransactionStateException        InvalidIsolationLevelException        InvalidTimeoutException        NestedTransactionNotSupportedException        NoTransactionException        TransactionException        TransactionSuspensionNotSupportedException        TransactionSystemException        TransactionTimedOutException        TransactionUsageException        UnexpectedRollbackException要搞明白Spring事务控制的原理,必须理解上面四个接口的含义,下面一一介绍之。1、PlatformTransactionManager是一个事务管理平台,该接口有许多具体的事务实现类,例如DataSourceTransactionManager, HibernateTransactionManager, JdoTransactionManager, JmsTransactionManager, JpaTransactionManager, JtaTransactionManager, TopLinkTransactionManager, WebLogicJtaTransactionManager 等等,通过实现此接口,Spring可以管理任何实现了这些接口的事务。开发人员也可以使用统一的编程模型来控制管理事务。此接口中有三个方法:void commit(TransactionStatus status)          Commit the given transaction, with regard to its status.          监视事务状态,并提交一个事务。TransactionStatus getTransaction(TransactionDefinition definition)          Return a currently active transaction or create a new one, according to the specified propagation behavior.          根据事务的隔离级别和传播行为,返回当前活动的事务或者产生一个新的事务。void rollback(TransactionStatus status)          Roll back the given transaction.          回滚给定的事务。

2、SavepointManager事务回滚点管理接口,提供创建、释放回滚点,或者回滚到指定的回滚点。方法摘要:Object createSavepoint()          Create a new savepoint.          创建一个新的回滚点。void releaseSavepoint(Object savepoint)          Explicitly release the given savepoint.          释放一个给定的回滚点。void rollbackToSavepoint(Object savepoint)          Roll back to the given savepoint.          回滚到给定的回滚点。

3、TransactionDefinition这个接口的作用就是定义事务的名称、隔离级别、传播行为、超时时间长短、只读属性等。字段摘要:(因为是接口,里面都是int常量,即public static final类型的,很多,我就只写常量的名字和含义)这些接口分两组,分别是事务隔离级别和事务传播行为。//事务隔离级别(数据库级别的知识) TransactionDefinition.ISOLATION_DEFAULT使用底层数据库默认隔离级别。TransactionDefinition.ISOLATION_READ_UNCOMMITTED 读未提交最低隔离等级,允许事务读取其他并行的事务还没有提交的数据,会发生脏读(dirty reads)、不可重复读(non-repeatable reads)、幻读(phantom read)等问题。TransactionDefinition.ISOLATION_READ_COMMITTED 读已提交允许事务读取其他并行的事务已经提交的数据,可以防止脏读问题。TransactionDefinition.ISOLATION_REPEATABLE_READ 可重复读保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。TransactionDefinition.ISOLATION_SERIALIZABLE 可串行化所有事务都严格隔离,各个事务顺序执行。很容易发生死锁。//事务传播行为TransactionDefinition.PROPAGATION_REQUIRED支持现有的事务,如果没有则新建一个事务。TransactionDefinition.PROPAGATION_SUPPORTS支持现有的事务,如果没有则以非事务状态运行。TransactionDefinition.PROPAGATION_MANDATORY支持现有事务,如果没有则抛出异常。TransactionDefinition.PROPAGATION_REQUIRES_NEW总是发起一个新事务。如果当前已存在一个事务,则将其挂起。TransactionDefinition.PROPAGATION_NOT_SUPPORTED不支持事务,总是以非事务状态运行,如果当前存在一个事务,则将其挂起。TransactionDefinition.PROPAGATION_NEVER不支持事务,总是以非事务状态运行,如果当前存在一个事务,则抛出异常。TransactionDefinition.PROPAGATION_NESTED如果石阡已经存在一个事务,则以嵌套事务的方式运行,如果当前没有事务,则创建一个新事务。方法摘要:int getIsolationLevel()          Return the isolation level.          返回事务的隔离级别。String getName()          Return the name of this transaction.          返回事务的名字。int getPropagationBehavior()          Return the propagation behavior.          返回事务的是传播行为。int getTimeout()          Return the transaction timeout.          返回事务的超时时间。boolean isReadOnly()          Return whether to optimize as read-only transaction.          返回是否(优化为)只读属性。4、TransactionStatus 这个接口的作用就是获取事务的状态(回滚点、是否完成、是否新事物、是否回滚)属性,还可以进行事务rollback-only的设置。方法摘要:boolean hasSavepoint()          Return whether this transaction internally carries a savepoint, i.e. has been created as nested transaction based on a savepoint.          判断这个事务是否有一个内在的回滚点(savepoint),即创建为基于回滚点的嵌套事务。boolean isCompleted()          Return whether this transaction is completed, that is, has already been committed or rolled back.          判断这个事务是否完成,也就是已经提交或者回滚。boolean isNewTransaction()          Return if the transaction is new, else participating in an existing transaction.          判断一个事物是否为新事务,或者是这个事务参与到一个已经存在的事务里面。boolean isRollbackOnly()          Return if the transaction has been set rollback-only.          判断这个事务是否已经设置了rollback-only。void setRollbackOnly()          Set the transaction rollback-only.          设置这个事务rollback-only。
分享到:
评论

相关推荐

    Spring事务管理Demo

    Spring事务管理的目的是确保数据的一致性和完整性,尤其是在多操作、多资源的环境中。本Demo将深入探讨Spring如何实现事务的管理。 首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 ...

    spring事务与数据库操作

    ### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...

    Spring事务流程图

    Spring事务管理是Spring框架的核心特性之一,主要用于处理应用程序中的数据一致性问题。在Spring中,事务管理分为编程式和声明式两种方式。本篇文章将详细解释Spring事务管理的流程,以及如何通过时序图来理解这一...

    Spring事务管理开发必备jar包

    本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理、编译工具以及与数据库交互的相关jar包。下面将对这些知识点进行详细解释: 1. **Spring框架*...

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

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

    spring事务案例分析.zip

    本主题将深入探讨“Spring事务案例分析.zip”中的关键知识点,包括Spring事务管理及其在实际项目中的应用。 首先,我们来了解什么是Spring事务管理。在分布式系统或数据库操作中,事务管理是确保数据一致性和完整性...

    Spring事务管理失效原因汇总

    标题“Spring事务管理失效原因汇总”指出了本文的核心内容是分析在使用Spring框架进行事务管理时可能遇到的问题及其原因。描述部分进一步说明了事务失效的后果往往不明显,容易在测试环节被忽略,但在生产环境中出现...

    spring 事务传播 demo

    在Spring框架中,事务管理是核心特性之一,它允许开发者以声明式或编程式的方式处理事务。本示例“spring 事务传播 demo”将聚焦于Spring的事务传播行为,这是在多个方法调用中控制事务边界的关键概念。下面我们将...

    Spring事务小demo

    这个名为"Spring事务小demo"的项目提供了一个实践示例,帮助开发者了解Spring事务处理的基本概念和用法。 首先,Spring事务管理是Spring框架的核心特性之一,它允许我们以声明式或编程式的方式管理事务。声明式事务...

    Spring事务管理的jar包

    本篇将深入探讨Spring事务管理的核心概念、工作原理以及如何使用`spring-tx-3.2.0.RELEASE.jar`这个jar包。 首先,我们需要理解什么是事务。在数据库系统中,事务是一组操作,这些操作被视为一个整体,要么全部完成...

    Spring 事务简单完整例子

    本文将深入探讨在Spring框架中如何管理事务,以“Spring 事务简单完整例子”为出发点,结合标签“spring,事务,jdbc事务”,我们将详细解释Spring事务管理的原理和实践。 首先,Spring提供了两种事务管理方式:编程...

    Spring事务详细讲解

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

    SPRING事务机制DEMO

    Spring事务机制是Java开发中非常重要的一个概念,它在企业级应用中扮演着核心角色,确保数据的一致性和完整性。Spring提供了多种事务管理方式,包括编程式事务管理和声明式事务管理。在这篇DEMO中,我们将重点探讨...

    spring 事务传播与隔离级别DEMO

    本DEMO主要探讨的是Spring事务的传播行为和隔离级别,这些概念对于理解和优化数据库操作至关重要。让我们深入理解这些概念及其实际应用。 首先,我们来谈谈事务的传播行为。在Spring中,当一个方法被另一个具有事务...

    Spring事务传播机制.docx

    当我们在使用 Spring 所提供的事务功能时,如果是仅仅处理单个的事务,是比较容易把握事务的提交与回滚,不过一旦引入嵌套事务后,多个事务的回滚和提交就会变得复杂起来,各个事务之间是如何相互影响的,是一个值得...

    Spring事务操作示例(四种方式)

    Spring事务操作示例(四种方式),包含完整代码和数据库文件(基于MySQL,在项目sql文件夹中),可运行,学习Spring事务详见博客:http://blog.csdn.net/daijin888888/article/details/51822257

    Spring事务传播Demo.zip

    本篇将基于"Spring事务传播Demo"来深入探讨Spring事务管理和传播行为。 首先,我们需要理解什么是事务。在数据库操作中,事务是一组操作,这些操作要么全部执行,要么全部不执行,以确保数据的一致性和完整性。在...

    spring事务,xml方式和注解方式

    Spring事务管理是Spring框架的核心特性之一,主要用于处理应用程序中的数据一致性问题。在多线程、分布式系统中,事务管理显得尤为重要。本节将详细介绍Spring如何通过XML配置和注解方式来实现事务管理。 首先,...

Global site tag (gtag.js) - Google Analytics