在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. 关于Mesos和Kubernetes的区别

    这个主题应该和服务发现注册一样,进入视野...

  2. [LeetCode] Word Break II (TLE)

    Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...

  3. ShooterGame 学习笔记1 PlayerPawn的两个Mesh的可见性

    GameMode Override 为 ShooterGame_TeamDeathMatch GameMode中设置的Default Pawn Class 为 PlayerPawn , PlayerP ...

  4. 直传文件到Azure Storage的Blob服务中

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:为了庆祝获得微信公众号赞赏功能,忙里抽闲分享一下最近工作的一点心得:如何直接从浏览器中上传文件到Azure ...

  5. javase基础笔记2——数据类型和面向对象

    API:Application program interface  程序调用一个方法去实现一个功能 正则表达式:regex 用来匹配的 javaEE里边有三大框架 SSH struts spring ...

  6. 智能车学习(二十二)——浅谈速度控制

    一.经典PID控制       使用遇限反向PID会比较适合有加减速的车子,使用变速积分适合跑匀速的车子.然后这种方法的条件下,一定要尽可能缩短控制周期..   二.PID加棒棒控制       针对 ...

  7. memcached for windows 修改端口和最大内存,以及常用命令

    在windows中使用memcached,必须先下载memcached for win32安装. PHP模块MemCache下载地址:http://downloads.php.net/pierre 服 ...

  8. 开发Portlet第二步:如何将Crystal静态Portlet转变成基于测试数据的动态Portlet?

    当基于Crystal的静态Portlet开发完成后,在与后台服务联调前,还需要将Portlet转换成基于测试数据的动态Portlet.具体步骤如下: 分步指南 复制Portlet项目,并修改相关的po ...

  9. mongodb学习05 操作详解(3)

    高级查询选项 //简单查询 var cursor = db.foo.find({"foo" : "bar"}) //封装查询 var cursor = db.f ...

  10. js 的一点用法

     js 中的json对象,ajax返回数据dataType为json否则无法将数据转换成json对象 也就无法通过json字符串转换成对象object,那么他将始终是个字符串,也就无法进行 对象操作. ...