spring tx:advice事务配置

2016年12月21日 17:27:22

阅读数:7629

http://www.cnblogs.com/rushoooooo/archive/2011/08/28/2155960.html
链接归纳的很详细。
  • 首先在/WEB-INF/applicationContext.xml添加以下内容:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory">
       <ref bean="mySessionFactory"/>
   </property>
</bean>

注:这是作为公共使用的事务管理器Bean。这个会是事先配置好的,不需各个模块各自去配。

  • 下面就开始配置各个模块所必须的部分,在各自的applicationContext-XXX-beans.xml配置的对于事务管理的详细信息。

首先就是配置事务的传播特性,如下:

<!--  配置事务传播特性 -->
<tx:advice id="TestAdvice" transaction-manager="transactionManager">
    <tx:attributes>
      <tx:method name="save*" propagation="REQUIRED"/>
      <tx:method name="del*" propagation="REQUIRED"/>
      <tx:method name="update*" propagation="REQUIRED"/>
      <tx:method name="add*" propagation="REQUIRED"/>
      <tx:method name="find*" propagation="REQUIRED"/>
      <tx:method name="get*" propagation="REQUIRED"/>
      <tx:method name="apply*" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>
<!--  配置参与事务的类 -->
<aop:config>
<aop:pointcut id="allTestServiceMethod" expression="execution(* com.test.testAda.test.model.service.*.*(..))"/>
<aop:advisor pointcut-ref="allTestServiceMethod" advice-ref="TestAdvice" />
</aop:config>

需要注意的地方:

(1) advice(建议)的命名:由于每个模块都会有自己的Advice,所以在命名上需要作出规范,初步的构想就是模块名+Advice(只是一种命名规范)。

(2) tx:attribute标签所配置的是作为事务的方法的命名类型。

如<tx:method name="save*" propagation="REQUIRED"/>

其中*为通配符,即代表以save为开头的所有方法,即表示符合此命名规则的方法作为一个事务。

propagation="REQUIRED"代表支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

(3) aop:pointcut标签配置参与事务的类,由于是在Service中进行数据库业务操作,配的应该是包含那些作为事务的方法的Service类。

首先应该特别注意的是id的命名,同样由于每个模块都有自己事务切面,所以我觉得初步的命名规则因为 all+模块名+ServiceMethod。而且每个模块之间不同之处还在于以下一句:

expression="execution(* com.test.testAda.test.model.service.*.*(..))"

其中第一个*代表返回值,第二*代表service下子包,第三个*代表方法名,“(..)”代表方法参数。

(4) aop:advisor标签就是把上面我们所配置的事务管理两部分属性整合起来作为整个事务管理。

下文转自http://blog.csdn.net/dw_java08/article/details/7682890

applicationContext-common.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.xsd 
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd 
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 
<!-- 配置sessionFactory --> 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
<property name="configLocation"> 
<value>classpath:hibernate.cfg.xml</value> 
</property> 
</bean>

<!-- 配置事务管理器 --> 
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
<property name="sessionFactory"> 
<ref bean="sessionFactory"/> 
</property> 
</bean>

<!-- 配置事务的传播特性 --> 
<tx:advice id="txAdvice" transaction-manager="transactionManager"> 
<tx:attributes> 
<tx:method name="add*" propagation="REQUIRED"/> 
<tx:method name="del*" propagation="REQUIRED"/> 
<tx:method name="modify*" propagation="REQUIRED"/> 
<tx:method name="*" read-only="true"/> 
</tx:attributes> 
</tx:advice>

<!-- 那些类的哪些方法参与事务 --> 
<aop:config> 
<aop:pointcut id="allManagerMethod" expression="execution(* com.z2sci.soa.manager.*.*(..))"/> 
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/> 
</aop:config>

</beans>

spring使用 <tx:advice>和 <aop:config> 用来配置事务,具体如何配置你可以参考Spring文档。

我解释一下(* com.z2sci.soa.manager.*.*(..))中几个通配符的含义:

|第一个 * —— 通配 任意返回值类型| 
|第二个 * —— 通配 包com.z2sci.soa.manager下的任意class| 
|第三个 * —— 通配 包com.z2sci.soa.manager下的任意class的任意方法| 
|第四个 .. —— 通配 方法可以有0个或多个参数|

综上:包com.z2sci.soa.manager下的任意class的具有任意返回值类型、任意数目参数和任意名称的方法 
<tx:advice/> 有关的设置

这一节里将描述通过 <tx:advice/> 标签来指定不同的事务性设置。默认的 <tx:advice/> 设置如下:

事务传播设置是 REQUIRED

隔离级别是 DEFAULT

事务是 读/写

事务超时默认是依赖于事务系统的,或者事务超时没有被支持。

任何 RuntimeException 将触发事务回滚,但是任何 checked Exception 将不触发事务回滚

这些默认的设置当然也是可以被改变的。 <tx:advice/> 和 <tx:attributes/> 标签里的 <tx:method/> 各种属性设置总结如下: 
表 9.1. <tx:method/> 有关的设置

属性 是否需要? 默认值 描述
name   与事务属性关联的方法名。通配符(*)可以用来指定一批关联到相同的事务属性的方法。 如:'get*'、'handle*'、'on*Event'等等。
propagation REQUIRED 事务传播行为
isolation DEFAULT 事务隔离级别
timeout -1 事务超时的时间(以秒为单位)
read-only false 事务是否只读?
rollback-for   将被触发进行回滚的 Exception(s);以逗号分开。 如:'com.foo.MyBusinessException,ServletException'
no-rollback-for   不 被触发进行回滚的 Exception(s);以逗号分开。 如:'com.foo.MyBusinessException

转载于:https://www.cnblogs.com/wanglichaoya/p/9104919.html

Spring 事务管理tx,aop相关推荐

  1. spring事务管理tx:Advice详解

    默认的 <tx:advice/> 设置如下: 事务传播设置是 REQUIRED隔离级别是 DEFAULT事务是 读/写事务超时默认是依赖于事务系统的,或者事务超时没有被支持.任何 Runt ...

  2. Spring事务管理-tx:advice标签

    首先先看一下代码: <bean name="transactionManager" class="org.springframework.jdbc.datasour ...

  3. Spring→事务、隔离级别、事务传播行为、编程式事务控制、XML配置声明式事务(原始方式)、XML配置声明式事务(基于tx/aop)、@注解配置声明式事务、优势总结

    事务 Spring事务管理 不考虑隔离引发问题 隔离级别 事务传播行为 演示环境搭建 编程式事务控制 XML配置声明式事务(原始方式) XML配置声明式事务(基于tx/aop) @注解配置声明式事务 ...

  4. Spring事务管理 与 SpringAOP

    1,Spring事务的核心接口 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略.  ...

  5. SPRING 事务管理说明

    spring 事务管理是通过AOP拦截指定的方法,进行事务管理. 事务配置 <aop:config proxy-target-class="true"><aop: ...

  6. Spring 事务管理高级应用难点剖析

    Spring 事务管理高级应用难点剖析: 第 1 部分 http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts1/index.html htt ...

  7. Spring 事务管理高级应用难点剖析--转

    第 1 部分 http://www.ibm.com/search/csass/search/?q=%E4%BA%8B%E5%8A%A1&sn=dw&lang=zh&cc=CN& ...

  8. Spring事务管理(详解+实例)

    写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: ...

  9. Spring事务管理amp;数据库隔离级别

    一.spring事务管理 1. 什么是事务 事务(Transaction)是多个操作数据库的步骤(CRUD)的集合,是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可 ...

  10. Spring事务管理机制

    Spring事务管理的四个优点: 提供一致的对于不同的事务管理的API 支持声明式事务管理(重点) 编程事务管理(在开发中应用比较少) 优秀的整合与Spring的数据访问 我们重点讲解spring的事 ...

最新文章

  1. Python代码规范和命名规范
  2. 怎么简述计算机网络的含义,计算机网络复习资料-含简答题参考答案
  3. 2019年秋计算机管理工作总结,年段工作总结(2019秋高一上)
  4. CSS基础(part8)--文本外观属性
  5. python中del语句
  6. TIM怎么显示每条信息的时间
  7. java spark yarn_《Spark官方文档》在YARN上运行Spark
  8. 手工给alv添加合计
  9. 瞬间“友尽”的五大整蛊代码,快去安排你的小伙伴吧!
  10. 疯狂java讲义 如何_[java学习]《疯狂java讲义》
  11. 【安卓项目】期末大作业——“记账宝”APP开发案例
  12. MVC和MVVM框架模式
  13. 拉格朗日法线性规划求解
  14. 服务器的所有网站共用443,多个ssl证书共用443端口apache
  15. 浩哥的Linux学习笔记之touch命令
  16. CSS中设置单机按钮,实现按下效果
  17. 设置div的内容及子标签向右对齐
  18. web一阶段 day14
  19. java webp文件转png,jpg
  20. 最简单的 DRM 应用 drm设备不工作

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 8668-22T汽车涂装技术(A) 参考试题
  2. 【渝粤教育】国家开放大学2018年春季 0239-22T电子商务物流管理 参考试题
  3. [渝粤教育] 西南科技大学 企业生产运作管理 在线考试复习资料2021版
  4. SuperPoint学习---demo代码理解
  5. You are here: Prof Andrew Binley's Homepage R3t
  6. time(null)的用法
  7. MySQL--视图view、触发器trigger、事务(start transaction)、存储过程(特殊的数据逻辑处理函数)、流程控制(if,case....)...
  8. Mac---使用tree生成目录结构
  9. 在 Angular 8 中,我们可以期待些什么
  10. python 在linux下通过top,和dh命令获得cpu,内存,以及硬盘信息