在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/>标签指定相应的名字。

最新文章

  1. 总结:JSP几种提交表单方法
  2. Javascript本质第一篇:核心概念
  3. Flex小结
  4. 大圆满的精髓–肯•威尔伯(KEN WILBER)
  5. ffmpeg在shell循环中只执行一次问题
  6. 【转】Linux系统启动过程分析
  7. BCB6 重装后的项目编译莫名问题
  8. Linux下用信号量实现对共享内存的访问保护
  9. Orcale Function Sequence
  10. 从大学开始学C++到现在的一些感悟
  11. API 之 MessageBox
  12. 评价早期SaaS创业公司时,投资人在关注什么?(是否有机会发展成一个平台,长期的护城河)
  13. (1) 类构造块,this(),static,单例模式串讲
  14. spring整合axis2(最小配置化)的示例
  15. bug:翻页
  16. Kafka+Storm写入Hbase和HDFS
  17. linux 触摸屏驱动
  18. C# 操作数据库常用的 SqlDbHelper
  19. 什么是P2P流标
  20. python--爬取豆瓣热门国产电视剧保存为文件

热门文章

  1. 【翻译二十】-java线程池
  2. [LeetCode] Remove Element (三种解法)
  3. html5移动Web开发实战
  4. phpcms-v9系统搭建wap网站及单页面
  5. Unity3D使用过程中常见的20个问题
  6. hdu 3183(贪心)
  7. barabasilab-networkScience学习笔记3-随机网络模型
  8. sql 根据指定条件获取一个字段批量获取数据插入另外一张表字段中+MD5加密
  9. host_network_interfaces_slow_mode_thresholds
  10. json入门(二)