在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. 图结构练习——最短路径(floyd算法(弗洛伊德))

    图结构练习——最短路径 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个带权无向图,求节点1到节点n的最短路径.   输 ...

  2. PostgreSQL的时间/日期函数使用

    PostgreSQL的常用时间函数使用整理如下: 一.获取系统时间函数 1.1 获取当前完整时间 select now(); david=# select now(); now ----------- ...

  3. 攻城狮在路上(叁)Linux(十八)--- 文件系统的简单操作

    本篇仅作为补漏. 一.查看磁盘和目录的容量:df  du df:列出文件系统的整体磁盘使用量. du:评估文件系统的磁盘使用量(常用于评估目录所占容量) 二.连接文件:ln 1.hard link:硬 ...

  4. 1080P、720P、4CIF、CIF所需要的理论带宽

    转自:http://blog.sina.com.cn/s/blog_64684bf30101hdl7.html 在视频监控系统中,对存储空间容量的大小需求是与画面质量的高低.及视频线路等都有很大关系. ...

  5. 安装VS2010水晶报表插件

    Visual Studio 2010默认不带水晶报表,需要安装一个水晶报表插件,首先下载此插件: http://downloads.businessobjects.com/akdlm/cr4vs201 ...

  6. 共享内存同行,王明学learn

    共享内存同行 一.共享内存概念 共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存, 这是传递数据的一种非常有效的方式. 二.函数学习 这里主要有创建共享内存.映射共享内存.分离共享内 ...

  7. loj 1406(状态压缩)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1406 思路:首先可以预处理出在每个顶点的状态的合法状态vis[u][state], 然 ...

  8. windows OBJECT查找

    PspCidTable表里.索引值总之4的倍数.也就是说 PID/4 才是PspCidTable索引.*8 才是PsPCidTable+偏移.获取进程对应的 _HANDLE_TABLE_ENTRY 结 ...

  9. Input对象的type类型

    Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍. 1,type=text        输入类型是text ...

  10. 为什么我们可以使用while(~scanf("%d"))读到文件末尾

    经过测试文件末尾是一个标志位EOF 在c语言里我们用int来输出EOF 可以发现EOF等于-1 我们之前那个文章已经写过了..在c语言里负数的存储策略是补码 [-1]的补码=~(1)+1 那么就是比如 ...