在Spring事务管理中通过TransactionProxyFactoryBean配置事务信息,此类通过3个重要接口完成事务的配置及相关操作,分别是PlatformTransactionManager、TransactionDefinition和TransactionStatus。其中TransactionDefinition用于描述事务的隔离级别超时时间是否为只读事务事务传播规则等控制事务具体行为的事务属性,这些属性可以通过XML配置或注解描述提供,也可以通过手工编程的方式设置。PlatformTransactionManager根据TransactionDefinition提供的事务属性配置信息,创建事务,并用TransactionStatus描述这个激活事务的状态,针对不同的持久化框架有不同的事务平台管理实现类。
 
编程式事务管理
        通过TransactionTemplate类方法 execute(TransactionCallback<T> action)的TransactionCallback回调接口中定义需要以事务方式组织的数据访问逻辑。该类还提供了设置事务管理器(PlatformTransactionManager的实现类隔离级别传播行为的相关属性。
 
基于XML配置声明式事务
        通过TransactionProxyFactoryBean类对业务类进行代理,织入事务增强逻辑。首先,需要为该代理类指定事务管理器,这些事务管理器实现了PlatformTransactionManager接口;其次,通过target属性指定需要代理的目标Bean,最后,为业务Bean的不同方法配置事务属性(Spring通过键值配置业务方法的事务属性信息,键可以使用通配符*)。
<bean id="XXXService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="target" ref="xxxServiceTarget"/>
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">传播行为,隔离级别,readOnly,-Exceptions,+Exception</prop>
</props>
</property>
</bean>
    注:通过指定带“+”号或“-”的异常类名,决定事务是否回滚。当抛出“-”型异常时,将触发事务回滚,当抛出“+”型异常时,即使这个异常是检查型异常,事务也会提交。Key值的具体配置和相关值可以参考TransactionAttributeEditor和TransactionDefinition。
 
基于tx/aop命名空间的配置
        通过tx命名空间定义织入事务的增强逻辑,然后使用aop命名空间定义相关的切面信息(切点和增强),具体配置信息如下:
        <aop:config>
<aop:pointcut id="" expression="" />
<aop:advisor pointcut-ref="" advice-ref="" />
</aop:config>
<tx:advice id="txAdvice" >
        <tx:attributes> 
            <tx:method name="" read-only="" isolation=""  propagation=""  no-rollback-for="" rollback-for="" timeout="-1"/>      
        </tx:attributes>
        </tx:advice>
    :在tx:method标签中,name表示与事务属性关联的方法名,可使用通配符(*); read-only标识事务是否可读;isolation配置事务的隔离级别;no-rollback-for配置不触发事务回滚的Exception;rollback-for配置事务回滚的Exception;propagation配置事务的传播行为。
 
基于注解配置声明式事务
        通过@Transactional注解对需要事务增强的Bean接口、实现类或方法进行标注,在容器中配置基于注解的事务增强驱动,即可启用基于注解的声明式事务。一般在具体业务类上使用@Transactional注解,也可以在方法处标注注解(需要使用特殊的事务属性),此时就会覆盖类定义处的注解。
<tx:annotation-driven transaction-manager="" proxy-target-class="" order=""/>
        如果需要使用不同的事务管理器时,需要在注解中指定出事务管理器的名字,并在XML配置事务管理器时需要使用<qualifier/>标签指定相应的名字。

【JAVA】Spring 事物管理的更多相关文章

  1. java陷阱之spring事物管理导致锁无效

    模拟锁情况无效 1.创建一个表 SET NAMES utf8mb4; ; DROP TABLE IF EXISTS `demo`; CREATE TABLE `demo` ( `id` ) NOT N ...

  2. MyBatis6:MyBatis集成Spring事物管理(下篇)

    前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...

  3. Spring事物管理--相关要点及配置事物管理器

    事务的四大特征 1.原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做 2.一致性:数据不会因为事务的执行而遭到破坏 3.隔离性:一个事物的执行,不受其他事务的干扰,即并 ...

  4. spring 事物管理没起到作用

    今天在做项目的时候发现配置的spring 事物管理没起到作用.可是配置又是依据官网配置的,不可能会错.最后发现使mysql的问题 普通情况下,mysql会默认提供多种存储引擎,你能够通过以下的查看: ...

  5. Spring事物管理简介 (转)

    一.事物1.什么是事物 事物指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败 2.事物的特性 原子性:事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生 一致性:事物前后数据 ...

  6. 集成Spring事物管理

    什么是事物 事物是访问数据库的一个操作序列,数据库应用系统通过事物集来完成对数据库的存取.事物的正确执行使得数据库从一种状态转换为另一种状态. 事物必须服从ISO/IEC所制定的ACID原则.ACID ...

  7. JAVA Spring 事物 ( 已转账为例 ) 基于 AOP 注解

    <一> 配置为文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...

  8. JAVA Spring 事物 ( 已转账为例 ) 基于 XML 配置,事务类型说明

    < 1 > 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...

  9. SpringAOP和Spring事物管理

    Spring AOP : Pointcut表达式: designators-指示器 wildcards-通配符 operators-操作符 wildcards: * -- 匹配任意数量的字符 + -- ...

随机推荐

  1. MYSQL的增删改查语句样码

    慢慢来,慢慢来.. 增: INSERT INTO person (person_id, fname, lname, gender, birth_date) VALUES (null, 'William ...

  2. SQLAchemy Core学习之Reflection

    如果以后万一有一个定义好了的库,可以用这种反射的方法,作常用的操作. #coding=utf-8 from datetime import datetime from sqlalchemy impor ...

  3. mac os x10.10 安装thrift

    http://thrift.apache.org/docs/install/ 一:安装最新版(自动安装) 最简单的是用homebrew进行安装 安装homebrew 在终端输入ruby -e &quo ...

  4. Python多版本共存之pyenv

    经常遇到这样的情况: 系统自带的Python是2.6,自己需要Python 2.7中的某些特性: 系统自带的Python是2.x,自己需要Python 3.x: 此时需要在系统中安装多个Python, ...

  5. 第一篇:SOUI是什么?

    概述 用C++做产品最痛苦的是什么?肯定是做UI. SOUI的使命就是把痛苦的UI变化成快乐的UI. 什么?UI还能快乐?脑子进水了吗? 当你看完这个系统教程的时候相信你面对UI至少不会再痛苦.你可以 ...

  6. Win7系统怎么开启远程桌面?Win7远程桌面怎么用(转)

    远程桌面服务开启之后,可以方便的远程管理服务器或计算机.为生活和工作带来不少便利呢,很多小伙伴还不知道怎么开启win7远程桌面吧(下面咗嚛以内网远程桌面为例)   工具/原料 Win7 Win7远程桌 ...

  7. matlab练习程序(简单多边形的核)

    还是计算几何, 多边形的核可以这样理解:这个核为原多边形内部的一个多边形,站在这个叫核的多边形中,我们能看到原多边形的任何一个位置. 算法步骤如下: 1.根据原多边形最大和最小的x,y初始化核多边形, ...

  8. Strust2 初体验

    Struts2的第一个案例 首先我们需要引入架包 entity: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 package ...

  9. Linux编程(3) MakeFile

    1. 在Linux中,make工具可以维护程序模块关系和生成可执行程序.它可根据程序模块的修改情况重新编译链接生成中间代码或最终的可执行程序.执行make命令,需要一个名为Makefile的文本文件, ...

  10. 用JAXP的SAX方式解析XML文件

    简单用JAXP的SAX方式(事件驱动)解析XML文件: 文件(1.XML) <?xml version="1.0" encoding="UTF-8" st ...