`
wtnhwbb
  • 浏览: 165826 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring参考手册 事务管理

阅读更多
pring对事务管理提供完整的支持,包括:
        提供一致的编程模型。
        支持声明式事务管理。
        支持简单的API来编程事务管理,而不用和类似JTA一样复杂的事务管理API打交道。
        和Spring的抽象数据源较好地整合。
核心概念

        Spring事务抽象的核心理念基于事务策略语义,事务策略通过 org.springframework.transaction.PlatformTransactionManager接口定义

java 代码
  1. public interface PlatformTransactionManager {   
  2. TransactionStatus getTransaction(TransactionDefinition definition)   
  3. throws TransactionException;   
  4. void commit(TransactionStatus status) throws TransactionException;   
  5. void rollback(TransactionStatus status) throws TransactionException;   
  6. }  

        getTransaction (..)方法根据TransactionDefinition参数返回TransactionStatus对象,返回的 TransactionStatus可以表示一个新的或已经存在的事务。TransactionDefinition接口指定如下信息:
                隔离级别
                事务传播性,用来指定当一个事务方法执行在一个存在的事务上下文时,是继续运行在现有的上下文,还是创建一个新的事务。
                指定事务超时
                指定只读状态

        TransactionStatus接口提供一些简单的方式用来控制事务执行和查询事务状态。

        Spring提供几个缺省的事务管理器实现,包括DataSourceTransactionManager,HibernateTransactionManager和JtaTransactionManager,这些事务管理器适用于不同的应用场景。

资源同步

        如何使用持久API,比如JDBC,JTA,HIBERNATE,正确处理资源的创建,清理以及通过PlatformTransactionManager触发事务同步呢?

        最 好的办法是使用Spring提供的高层持久层API,这些API不是原生API的替换,而是在内部使用原生API处理资源创建,重用,清除,事务同步以及 异常映射,这样用户的数据访问代码不必关心这些底层细节。这些高层API都基于模板实现,比如JDBCTemplate, HibernateTemplate。

        也 可以使用底层一点的类,比如DataSourceUtils,SessionFactoryUtils, PersistenceManagerFactoryUtils。如果应用程序需要直接处理原生API提供的资源类型,这些类提供获取容器管理的实例,事 务同步和异常映射的功能。

声明式事务管理

        Spring2.0可以不再使用TransactionProxyFactoryBean来配置声明式事务。

EJB事务/Spring事务

EJB声明事务绑定到JTA,而Spring事务可以运行在任何环境。
        Spring事务可以应用到任何类,而不是限制在EJB。
        Spring提供声明式回滚规则,可以指定哪个异常将导致事务回滚,而EJB事务只能在发生系统异常时回滚事务。
        Spring可以使用AOP提供自定义事务处理。
        Spring不支持跨远程调用的事务传播,EJB提供这个特性,但是通常不应该让事务跨越远程调用。

Spring的声明式事务管理基于AOP代理,事务Advice是基于XML驱动的。Spring会基于事务配置元信息,合适的 PlatformTransactionManager和TransactionInterceptor生成一个AOP代理,驱动Around方式的事务 Advice。

配置Spring事务

       下面的示例描述了一个典型的声明式事务设置,首先需要包含对http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd的引用,然后使用tx:advice定义事务Advice以及事务属性,最后使用aop:config定义advicor。

xml 代码
  1. <!---->  
  2. xml version="1.0" encoding="UTF-8"?>  
  3. <beans xmlns="http://www.springframework.org/schema/beans"  
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5. xmlns:aop="http://www.springframework.org/schema/aop"  
  6. xmlns:tx="http://www.springframework.org/schema/tx"  
  7. xsi:schemaLocation="   
  8. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.Transaction management   
  9. Spring Framework (2.0.2) 177   
  10. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd   
  11. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">  
  12. <!---->  
  13. <bean id="fooService" class="x.y.service.DefaultFooService"/>  
  14. <!---->  
  15. <tx:advice id="txAdvice" transaction-manager="txManager">  
  16. <!---->  
  17. <tx:attributes>  
  18. <!---->  
  19. <tx:method name="get*" read-only="true"/>  
  20. <!---->  
  21. <tx:method name="*"/>  
  22. <!---->tx:attributes>  
  23. <!---->tx:advice>  
  24.  
  25. <aop:config>  
  26. <aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/>  
  27. <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>  
  28. <!---->aop:config>  
  29. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  30. <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>  
  31. <property name="url" value="jdbc:oracle:thin:@rj-t42:1521:elvis"/>  
  32. <property name="username" value="scott"/>  
  33. <property name="password" value="tiger"/>  
  34. <!---->bean>  
  35.  
  36. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  37. <property name="dataSource" ref="dataSource"/>  
  38. <!---->bean>  
  39.  
  40. <!---->beans>  
定义回滚规则

       Spring缺省在发生unchecked异常的时候回滚 事务,也提供支持,可以自定义在抛出特定异常时回滚事务,下面示例配置在捕获NoProductInStockException时回滚事务。

xml 代码
  1. <tx:advice id="txAdvice" transaction-manager="txManager">  
  2. <tx:attributes>  
  3. <tx:method name="get*" read-only="false" rollback-for="NoProductInStockException"/>  
  4. <tx:method name="*"/>  
  5. tx:attributes>  
  6. tx:advice>  

也可以使用编程的方式回滚事务,示例代码如下:

java 代码
  1. public void resolvePosition() {   
  2. try {   
  3. // some business logic...   
  4. catch (NoProductInStockException ex) {   
  5. // trigger rollback programmatically   
  6. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();   
  7. }   
  8. }  
Tx:advice设置

       Propagation……事务传播,缺省值为Required。
       Isolation……隔离级别,缺省值为Default。
       rollback-for……指定捕获哪些异常时需要回滚事务
       no-rollback-for……指定捕获哪些异常时不需要回滚事务
       timeout……指定事务超时,缺省为-1。
       read-only……指定事务是否是只读的,缺省为false

@Transaction注记

       Spring支持使用注记声明事务语义,前提是必须使用JDK 5。要使用事务注记,只需要添加合适的注记到类或者方法上,然后在上下文中添加如下配置即可:

xml 代码
  1. <tx:annotation-driven transaction-manager="txManager"/>  

       需要注意的是,@Transaction注记可以标注在接 口,类和方法上,但是推荐使用在具体类上,因为注记是不能继承的,如果Spring使用基于类的代理(CGLIB),事务声明将不会生效。

编程事务管理

       有两种方式通过编程实现事务管理
              使用TransactionTemplate类
              直接使用PlatformTransactionManager类。

分享到:
评论

相关推荐

    Spring 参考手册 Spring速查手册 spring初学者使用

    这本《Spring参考手册》与《Spring速查手册》是学习和掌握Spring框架的重要资源,特别适合初学者入门。 一、Spring概述 Spring框架由多个模块组成,包括Core Container(核心容器)、Data Access/Integration(数据...

    spring中文参考手册

    Spring中文参考手册是开发者掌握和深入理解这一框架的重要资源。下面将根据提供的标题和描述,详细介绍Spring框架的关键概念、核心功能以及如何使用手册进行学习。 1. **核心模块与概念** - **依赖注入...

    Spring2.5-中文参考手册chm

    Spring2.5中文参考手册是学习和理解Spring框架的重要资源,涵盖了上述所有核心概念和特性。通过深入阅读,开发者可以掌握如何利用Spring 2.5构建高效、灵活且易于维护的企业级应用。无论是在传统的J2EE环境中还是...

    spring开发参考手册

    《Spring开发参考手册》是Spring框架开发者不可或缺的资源,它提供了详尽的Spring应用开发指南。这份手册以CHM(Microsoft Compiled HTML Help)格式呈现,易于查阅和使用。以下是对手册中关键知识点的概述。 1. **...

    Spring框架开发参考中文手册

    通过定义切面、通知(advisors)、切入点(pointcuts)等,可以在不修改原有业务逻辑的情况下,实现对代码的增强,如日志记录、事务管理等。 五、数据访问/集成 Spring提供了对各种数据访问技术的支持,包括JDBC、...

    Spring 中文参考手册

    这份"Spring中文参考手册"提供了全面的Spring框架组件的详细解释,旨在帮助开发者更好地理解和使用Spring。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    Spring参考手册

    《Spring参考手册》是Spring Framework开发者的必备指南,它涵盖了Spring框架的核心概念、设计原则以及实际应用中的详细信息。Spring Framework作为Java企业级应用的重要支柱,提供了丰富的功能,包括依赖注入、面向...

    spring 2.0中文参考手册

    《Spring 2.0中文参考手册》是一本深入解析Spring框架的重要资料,它全面覆盖了Spring 2.0版本的核心特性和应用场景。Spring作为一个轻量级的Java企业级应用框架,以其模块化、松耦合的设计理念,已经成为现代Java...

    spring2.0中文参考手册.rar

    《Spring 2.0 中文参考手册》是一个详尽阐述 Spring 框架核心特性和扩展功能的重要资源,尤其对于中文开发者来说,它提供了一条理解 Spring 2.0 版本的关键途径。Spring 是一个广泛应用的 Java 开发框架,以其模块化...

    Spring 开发参考手册

    ### Spring 开发参考手册知识点详解 #### 一、Spring 概览 **Spring** 是一个开源框架,最初是由 Rod Johnson 创建的,旨在简化企业级 Java 应用程序的开发过程。Spring 提供了一种轻量级的方式来管理和配置 Java ...

    Spring Framework 开发参考手册

    《Spring Framework 开发参考手册》是一本针对Java开发者的重要指南,尤其对于那些使用Spring框架进行企业级应用开发的程序员来说,它提供了全面且深入的指导。Spring是Java平台上的一个开源框架,以其依赖注入...

    spring2.5.2开发参考手册pdf,spring2.5.ppt,Spring2.5-中文参考手册.chm

    这份手册详细介绍了Spring 2.5.2的各个方面,包括IoC(Inversion of Control)容器、AOP(Aspect-Oriented Programming)、数据访问、Web开发、事务管理等。其中,IoC容器是Spring的核心,它允许开发者通过配置来...

    Spring 参考手册及开发指南中文版

    以下是对这两个文档——"Spring2.0参考手册(中文).pdf"和"Spring开发指南中文.pdf"中关键知识点的详细解读。 1. **依赖注入(Dependency Injection, DI)**:这是Spring的核心特性之一,允许开发者将对象间的依赖...

    spring开发参考手册(中文版)

    《Spring开发参考手册(中文版)》是针对Java开发者的一份宝贵资源,它全面涵盖了Spring框架的核心概念、配置、使用方法以及最佳实践。Spring作为Java企业级应用开发的主流框架,以其模块化、轻量级和强大的依赖注入...

    spring2.0中文开发参考手册(CHM)

    《Spring 2.0中文开发参考手册》是针对Spring框架2.0版本的一份详尽指南,旨在帮助开发者深入理解并充分利用Spring 2.0的新特性与改进。Spring框架是Java开发中的一个核心组件,尤其在企业级应用中广泛使用,它通过...

    Spring2中文参考手册

    在此基础上,Spring还提供了包括声明式事务管理,RMI或Web Services远程访问业务逻辑,以及可以多种方法进行的持久化数据库地解决方案。另外,Spring还有一个全功能的 MVC框架,并能透明的把 AOP 集成到你的软件中去...

    Spring Framework 中文参考手册.pdf

    《Spring Framework 中文参考手册》是一份详尽的文档,为开发者提供了全面深入的理解和应用Spring框架所需的各类知识点。Spring框架作为Java开发领域中的重量级框架之一,以其强大的功能、灵活的配置和广泛的社区...

    Spring2.5-中文参考手册(这是个chm格式的文档)

    这本《Spring2.5-中文参考手册》涵盖了以上所有内容的详细解释,包括每个特性的使用方法、示例代码以及问题解决方案。对于希望深入了解Spring框架,尤其是2.5版本的开发者来说,是一份宝贵的资源。尽管版本较旧,但...

    Spring Framework 开发参考手册.pdf

    《Spring Framework 开发参考手册》是一本详尽深入地探讨Spring框架的权威指南。Spring作为Java平台上的核心框架,以其模块化、松耦合和面向切面编程(AOP)的特点,深受广大开发者喜爱。本手册旨在帮助开发者全面...

Global site tag (gtag.js) - Google Analytics