详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt123

首先先看配置文件:

[html] view plaincopy

  1. <!-- hibernate -->

  2. <bean id="sessionFactory"

  3. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

  4. <property name="dataSource" ref="dataSource" />

  5. <property name="hibernateProperties">

  6. <props>

  7. <prop key="hibernate.hbm2ddl.auto">update</prop>

  8. <prop key="hibernate.show_sql">true</prop>

  9. <prop key="hibernate.format_sql">true</prop>

  10. <prop key="connection.autoReconnect">true</prop>

  11. <prop key="connection.autoReconnectForPools">true</prop>

  12. <prop key="connection.is-connection-validation-required">true</prop>

  13. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>

  14. </props>

  15. </property>

  16. <property name="mappingDirectoryLocations">

  17. <list>

  18. <value>classpath*:*oddtech/bean</value>

  19. </list>

  20. </property>

  21. </bean>

  22. <!-- 事務管理 -->

  23. <bean id="txManager"

  24. class="org.springframework.orm.hibernate3.HibernateTransactionManager">

  25. <property name="sessionFactory" ref="sessionFactory" />

  26. </bean>

  27. <!-- 註解式事務的支持 -->

  28. <tx:annotation-driven transaction-manager="txManager"  order="0"/>

  29. <!-- 服務事務註冊切面 -->

  30. <aop:config >

  31. <aop:pointcut expression="execution(* oddtech.service.impl.*.*(..))"

  32. id="txPoint"  />

  33. <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"  order="1"/>

  34. </aop:config>

  35. <tx:advice transaction-manager="txManager" id="txAdvice">

  36. <tx:attributes >

  37. <tx:method name="find*" propagation="REQUIRED" read-only="true"

  38. rollback-for="Exception" />

  39. <tx:method name="select*" propagation="REQUIRED" read-only="true"

  40. rollback-for="Exception" />

  41. <tx:method name="insert*" propagation="REQUIRED"

  42. rollback-for="Exception" />

  43. <tx:method name="delete*" propagation="REQUIRED"

  44. rollback-for="Exception" />

  45. <tx:method name="update*" propagation="REQUIRED"

  46. rollback-for="Exception" />

  47. <tx:method name="modify*" propagation="REQUIRED"

  48. rollback-for="Exception" />

  49. <tx:method name="*" read-only="true"

  50. rollback-for="Exception" />

  51. </tx:attributes>

  52. </tx:advice>

当在oddtech.service.impl包下某个类(Test)某个方法(insert)使用了@Transactional,相当于在执行new Test().insert() 方法执行2次AOP切面。那么我们需要通过order 属性去定义AOP切面的先后执行顺序。 order越小,在AOP的chain 中越靠前,越先执行。(chain模式)

所以 我们需要在<tx:annotation-driven transaction-manager="txManager"  order="0"/>中加入order属性为0,<aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"  order="1"/>加入order 属性为1.那么他们两个的执行顺序如下:

。这样就属于事务嵌套

那么我们再看上边说的例子:当在oddtech.service.impl包下某个类(Test)某个方法(insert)使用了@Transactional,那么我们想让insert 方法只读,read-only=true,那么我们需要这样去定义:@Transactional(readOnly = true,propagation=Propagation.REQUIRED),为什么呢?

在声明事务中,我们对insert 的事务传播级别定义为:REQUIRED,关于事务传播级别,请参照http://blog.csdn.net/feng27156/article/details/8534609,那么在注解事务中我们定义REQUIRED 的事务。声明事务在使用注解定义的事务级别。

除非在特殊的情况下,注解事务不要和声明事务有冲突。声明事务定义的是统一的规则,如果你想让某一个方法有特殊的事务传播机制的话,那么不要和统一的规则有冲突。

<tx:method name="*" read-only="true" rollback-for="Exception" />

按照規則,定義一個test方法,加入:@Transactional定義。则test 方法爲read-only=false,propagation=REQUIRED。這是默認的。統一規則<tx:method name="*" read-only="true" rollback-for="Exception" />不會對test方法的註解事務衝突。

spring配置和注解事务同时存在导致的事务嵌套的更多相关文章

  1. spring boot:方法中使用try...catch导致@Transactional事务无效的解决(spring boot 2.3.4)

    一,方法中使用try...catch导致@Transactional事务无效的解决方法 1,问题的描述: 如果一个方法添加了@Transactional注解声明事务, 而方法内又使用了try catc ...

  2. spring配置redis注解缓存

    前几天在spring整合Redis的时候使用了手动的方式,也就是可以手动的向redis添加缓存与清除缓存,参考:http://www.cnblogs.com/qlqwjy/p/8562703.html ...

  3. spring声明式事务管理方式( 基于tx和aop名字空间的xml配置+@Transactional注解)

    1. 声明式事务管理分类 声明式事务管理也有两种常用的方式, 一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解. 显然基于注解的方式更简单易用,更清爽. ...

  4. Spring编程式注解使用不当导致其他事务无法正常提交

    1.事故背景 原本在使用的是注解式事务,后面因为需要在事务中增加异步推送机制,所以需要将推送机制放到事务之外,修改后发现系统经常出现事务长时间无法提交导致回滚. 2.排查流程 (1)一开始重启应用是能 ...

  5. Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

    转: http://blog.csdn.net/it_man/article/details/5074371 Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之 ...

  6. SpringMVC对包的扫描范围扩大后,导致的事务配置不生效问题

    问题场景 项目使用的框架:Spring 4.1.4 + Hibernate 4.3.8 + MySQL. web.xml中对Spring的配置: <!-- 把 Spring 容器集成到 Web ...

  7. Spring笔记04_AOP注解开发_模板_事务

    目录 1. Spring基于AspectJ的注解的AOP开发 1. 1 SpringAOP的注解入门 1.2 Spring的AOP的注解通知类型 1.2.1 @Before:前置通知 1.2.2 @A ...

  8. spring boot整合shiro后,部分注解(Cache缓存、Transaction事务等)失效的问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/elonpage/article/details/78965176 前言 整合有缓存.事务的sprin ...

  9. Spring配置--tx事务配置方式

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

随机推荐

  1. NLPIR大数据挖掘平台新增敏感词扫描功能

    在网络日益发达的现在,也伴随着有益信息与造成不稳定因素的信息也随之日益泛滥,为了网民的思想健康,也为了社会的和谐,在许多对外公共场合下,有些内容是要经过审查才能显示的.在网络审查初期,都是通过人工审核 ...

  2. reversing.kr easy crack 之write up

    之前学逆向感觉学得一踏糊涂,这阶段好多师傅带我,一定要好好学,重新开始,认真学习. 来看打开可执行文件: 用ollydbg载入,单步执行后停到了入口点: 分析入口点,并没有加壳,于是F9执行程序,跳出 ...

  3. CI 结合 vue.js 的搜索功能模块

    CI 结合 vue.js 的搜索功能模块 最近在有优化公司后台的某个模块的搜索功能优化 原先的是这个样子的,很是单调: 老大给我找个图希望我能弄成这样子: 经过不断修改,最后成了这样子 是不是比以前好 ...

  4. UICollectionView基本使用详解(OC)

    概述 UICollectionView是从iOS6开始引入使用的,目前应用非常广泛,很牛逼!老外的博客也是这么说的(传送门) ## 与UITableView的初步比较 UITableView应该是大家 ...

  5. LoadRunner+Android模所器录制脚本

    为了测试Android软件的服务端的功能,需要重现某些客户端操作,便于发现功能问题,性能问题.也方便客户端与本机服务端特别是服务端代码进行断点调试.这个时候需要对网络操作进行重现. loadRunne ...

  6. python学习===如何理解python中的return

    首先要了解,函数是什么?书上可能会说函数是完成功能的模块之类的话.其实说白了,函数就是个你招来的工人.你给他一些材料,告诉他怎么用这些材料拼装,然后他负责把拼装好的成品交给你.材料就是函数的参数,成品 ...

  7. RGB和HSV颜色空间

    转载:http://blog.csdn.net/carson2005/article/details/6243892 RGB颜色空间: RGB(red,green,blue)颜色空间最常用的用途就是显 ...

  8. Win7 IE11无法打开的可能解决办法

    IE11点击后无反应,应该如何解决呢?我的机器出现上述情况后,采用下面的方法解决了问题:第一步,进入Windows 7的运行,打开Regedit,即注册表编辑器.依次找到 >>HKEY_C ...

  9. Qt版权符号显示问题

    在个别界面中需要显示版权信息,其中©符号在界面上显示,有时会偏小或者显示为问号~ 其中一种解决办法用html的方式显示实体字符(©>Copyright© 2016</font>&qu ...

  10. Obj-C 实现 QFileDialog函数

    Obj-C 实现 QFileDialog函数(getOpenFileName/getOpenFileNames/getExistingDirectory/getSaveFileName) 1.getO ...