pring对事务管理提供完整的支持,包括:
提供一致的编程模型。
支持声明式事务管理。
支持简单的API来编程事务管理,而不用和类似JTA一样复杂的事务管理API打交道。
和Spring的抽象数据源较好地整合。
核心概念
Spring事务抽象的核心理念基于事务策略语义,事务策略通过 org.springframework.transaction.PlatformTransactionManager接口定义
java 代码
- public interface PlatformTransactionManager {
- TransactionStatus getTransaction(TransactionDefinition definition)
- throws TransactionException;
- void commit(TransactionStatus status) throws TransactionException;
- void rollback(TransactionStatus status) throws TransactionException;
- }
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 代码
-
- xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.Transaction management
- Spring Framework (2.0.2) 177
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
-
- <bean id="fooService" class="x.y.service.DefaultFooService"/>
-
- <tx:advice id="txAdvice" transaction-manager="txManager">
-
- <tx:attributes>
-
- <tx:method name="get*" read-only="true"/>
-
- <tx:method name="*"/>
- <!---->tx:attributes>
- <!---->tx:advice>
-
- <aop:config>
- <aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/>
- <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>
- <!---->aop:config>
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
- <property name="url" value="jdbc:oracle:thin:@rj-t42:1521:elvis"/>
- <property name="username" value="scott"/>
- <property name="password" value="tiger"/>
- <!---->bean>
-
- <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"/>
- <!---->bean>
-
- <!---->beans>
定义回滚规则
Spring缺省在发生unchecked异常的时候回滚 事务,也提供支持,可以自定义在抛出特定异常时回滚事务,下面示例配置在捕获NoProductInStockException时回滚事务。
xml 代码
- <tx:advice id="txAdvice" transaction-manager="txManager">
- <tx:attributes>
- <tx:method name="get*" read-only="false" rollback-for="NoProductInStockException"/>
- <tx:method name="*"/>
- tx:attributes>
- tx:advice>
也可以使用编程的方式回滚事务,示例代码如下:
java 代码
- public void resolvePosition() {
- try {
-
- } catch (NoProductInStockException ex) {
-
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- }
- }
Tx:advice设置
Propagation……事务传播,缺省值为Required。
Isolation……隔离级别,缺省值为Default。
rollback-for……指定捕获哪些异常时需要回滚事务
no-rollback-for……指定捕获哪些异常时不需要回滚事务
timeout……指定事务超时,缺省为-1。
read-only……指定事务是否是只读的,缺省为false
@Transaction注记
Spring支持使用注记声明事务语义,前提是必须使用JDK 5。要使用事务注记,只需要添加合适的注记到类或者方法上,然后在上下文中添加如下配置即可:
xml 代码
- <tx:annotation-driven transaction-manager="txManager"/>
需要注意的是,@Transaction注记可以标注在接 口,类和方法上,但是推荐使用在具体类上,因为注记是不能继承的,如果Spring使用基于类的代理(CGLIB),事务声明将不会生效。
编程事务管理
有两种方式通过编程实现事务管理
使用TransactionTemplate类
直接使用PlatformTransactionManager类。
分享到:
相关推荐
这本《Spring参考手册》与《Spring速查手册》是学习和掌握Spring框架的重要资源,特别适合初学者入门。 一、Spring概述 Spring框架由多个模块组成,包括Core Container(核心容器)、Data Access/Integration(数据...
Spring中文参考手册是开发者掌握和深入理解这一框架的重要资源。下面将根据提供的标题和描述,详细介绍Spring框架的关键概念、核心功能以及如何使用手册进行学习。 1. **核心模块与概念** - **依赖注入...
Spring2.5中文参考手册是学习和理解Spring框架的重要资源,涵盖了上述所有核心概念和特性。通过深入阅读,开发者可以掌握如何利用Spring 2.5构建高效、灵活且易于维护的企业级应用。无论是在传统的J2EE环境中还是...
《Spring开发参考手册》是Spring框架开发者不可或缺的资源,它提供了详尽的Spring应用开发指南。这份手册以CHM(Microsoft Compiled HTML Help)格式呈现,易于查阅和使用。以下是对手册中关键知识点的概述。 1. **...
通过定义切面、通知(advisors)、切入点(pointcuts)等,可以在不修改原有业务逻辑的情况下,实现对代码的增强,如日志记录、事务管理等。 五、数据访问/集成 Spring提供了对各种数据访问技术的支持,包括JDBC、...
这份"Spring中文参考手册"提供了全面的Spring框架组件的详细解释,旨在帮助开发者更好地理解和使用Spring。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...
《Spring参考手册》是Spring Framework开发者的必备指南,它涵盖了Spring框架的核心概念、设计原则以及实际应用中的详细信息。Spring Framework作为Java企业级应用的重要支柱,提供了丰富的功能,包括依赖注入、面向...
《Spring 2.0中文参考手册》是一本深入解析Spring框架的重要资料,它全面覆盖了Spring 2.0版本的核心特性和应用场景。Spring作为一个轻量级的Java企业级应用框架,以其模块化、松耦合的设计理念,已经成为现代Java...
《Spring 2.0 中文参考手册》是一个详尽阐述 Spring 框架核心特性和扩展功能的重要资源,尤其对于中文开发者来说,它提供了一条理解 Spring 2.0 版本的关键途径。Spring 是一个广泛应用的 Java 开发框架,以其模块化...
### Spring 开发参考手册知识点详解 #### 一、Spring 概览 **Spring** 是一个开源框架,最初是由 Rod Johnson 创建的,旨在简化企业级 Java 应用程序的开发过程。Spring 提供了一种轻量级的方式来管理和配置 Java ...
《Spring Framework 开发参考手册》是一本针对Java开发者的重要指南,尤其对于那些使用Spring框架进行企业级应用开发的程序员来说,它提供了全面且深入的指导。Spring是Java平台上的一个开源框架,以其依赖注入...
这份手册详细介绍了Spring 2.5.2的各个方面,包括IoC(Inversion of Control)容器、AOP(Aspect-Oriented Programming)、数据访问、Web开发、事务管理等。其中,IoC容器是Spring的核心,它允许开发者通过配置来...
以下是对这两个文档——"Spring2.0参考手册(中文).pdf"和"Spring开发指南中文.pdf"中关键知识点的详细解读。 1. **依赖注入(Dependency Injection, DI)**:这是Spring的核心特性之一,允许开发者将对象间的依赖...
《Spring开发参考手册(中文版)》是针对Java开发者的一份宝贵资源,它全面涵盖了Spring框架的核心概念、配置、使用方法以及最佳实践。Spring作为Java企业级应用开发的主流框架,以其模块化、轻量级和强大的依赖注入...
《Spring 2.0中文开发参考手册》是针对Spring框架2.0版本的一份详尽指南,旨在帮助开发者深入理解并充分利用Spring 2.0的新特性与改进。Spring框架是Java开发中的一个核心组件,尤其在企业级应用中广泛使用,它通过...
在此基础上,Spring还提供了包括声明式事务管理,RMI或Web Services远程访问业务逻辑,以及可以多种方法进行的持久化数据库地解决方案。另外,Spring还有一个全功能的 MVC框架,并能透明的把 AOP 集成到你的软件中去...
《Spring Framework 中文参考手册》是一份详尽的文档,为开发者提供了全面深入的理解和应用Spring框架所需的各类知识点。Spring框架作为Java开发领域中的重量级框架之一,以其强大的功能、灵活的配置和广泛的社区...
这本《Spring2.5-中文参考手册》涵盖了以上所有内容的详细解释,包括每个特性的使用方法、示例代码以及问题解决方案。对于希望深入了解Spring框架,尤其是2.5版本的开发者来说,是一份宝贵的资源。尽管版本较旧,但...
《Spring Framework 开发参考手册》是一本详尽深入地探讨Spring框架的权威指南。Spring作为Java平台上的核心框架,以其模块化、松耦合和面向切面编程(AOP)的特点,深受广大开发者喜爱。本手册旨在帮助开发者全面...