环境:mybatis3.3,spring3.2,druid

我是将事物交给springAOP进行管理,采用的xml方式配置,同时开启支持注解式事物驱动。

 <!-- 下面是配置声明式事务管理的,个人感觉比用注解管理事务要简单方便 --><bean id="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="OracledataSource"></property></bean><!-- 定义事务传播属性 --> <tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="save*" propagation="REQUIRED"rollback-for="Exception" /><tx:method name="insert*" propagation="REQUIRED"rollback-for="Exception" /> <tx:method name="update*" propagation="REQUIRED"rollback-for="Exception" /><tx:method name="remove*" propagation="REQUIRED"rollback-for="Exception" /><tx:method name="delete*" propagation="REQUIRED"rollback-for="Exception" /><tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" /><tx:method name="get*" read-only="true" /><tx:method name="find*" read-only="true" /><tx:method name="list*" read-only="true" /><tx:method name="*" rollback-for="Exception" /></tx:attributes></tx:advice><!-- proxy-target-class="true" 解决spring自动注解不能自动动态转换接口类成实现类的问题;默认状态下,proxy-target-class属性的值为false,那么被代理类是基于javaSE(JDK)的动态代理(一般被代理类会实现接口);如果显式的设置了proxy-target-class属性的值为true,那么被代理类就将基于cglib动态代理(spring框架中的代理)--><aop:config proxy-target-class="true"><!-- 管理事务操作 说明在这个包中的这些类中的这些方法应用前面 txAdvice 的配置事务传播属性--><aop:advisor pointcut="execution(* com.erp.*.service..*.*(..))"advice-ref="txAdvice" /></aop:config><!-- 把扫描Service的配置放在配置事务的后面而不是SpringMVC的配置中主要是避免配置文件的加载顺序先加载SpringMVC后加载这儿这个配置文件导致 事务不起作用 --><!-- 配置spring扫描所有Service和Repository组件自动装配 --><!--自动扫描含有@Service将其注入为bean --><context:component-scan base-package="com.erp.*.service" /><!--自动扫描含有@Repository将其注入为bean --><context:component-scan base-package="com.erp.*.dao" />

配置方式很多,具体大家可以去网上查找,此处就不赘述了,这里之说下可能造成事物失效的原因:

前提是你的事物配置不会出现基本的错误,如excution表达式的错误,导致不能正确的注入事物,以及advice中指定注册的事物管理bean等

一:想必大家都用了springMVC,并且使用了其扫描器组件,对项目中加入servcie /ctroller注解的bean进行注册交给srping容器管理,在springMVC配置文件中我们只扫描ctroller对所有的service进行过滤掉,因为按照spring配置文件的加载顺序来讲,先加载springmvc配置文件,再加载spring配置文件,我们的事物一般都在srping配置文件中进行配置,如果此时在加载srpingMVC配置文件的时候,把servlce也给注册了,但是此时事物还没加载,也就导致后面的事物无法成功注入到service中。所以把对service的扫描放在spring配置文件中或是其他配置文件中。

二:如果以上步骤都没问题,事物还是失效,查看事物配置中的excution表达式路径是否正确,查看rollback-for指定的异常类是否有,通过Log4j ,debug模式将事物日志打印出来,在方法中手动new一个异常抛出(throw new RuntimeException())看是否事物回滚了,注意异常抛出要在service层

三:如果你用了mysql数据库,查看数据库存储引擎,MyISAM是不支持事物的,需要改成InnoDB

四:如果Service中有方法间的调用当且使用cglib动态增强aop时,注意每个方法都声明了事务。

springAOP事物管理不生效原因总结————转载收藏于: superdog007相关推荐

  1. spring同类调用事务不生效-原因及三种解决方式

    spring提供的声明式事务注解@Transactional,极大的方便了开发者管理事务,无需手动编写开启.提交.回滚事务的代码. 但是也带来了一些隐患,如果注解使用不当,可能导致事务不生效,最终导致 ...

  2. Spring事物管理(二)

    Spring事物处理规则: 运行时异常,默认回滚. 编译异常,默认提交. 事物案例:购买股票 数据库脚本 /* SQLyog v10.2 MySQL - 5.6.24 : Database - y21 ...

  3. spring事物管理--声明式(AspectJ)注解实现 (推荐使用)

    1.表结构及数据 2.使用的jar包 3.service.Dao层接口与实现类: Dao接口: //转账案例持久层接口 public interface AccountDao {/*** @param ...

  4. JPA、EJB、事物管理、WebSphere ---相关内容整理

    目录 1.前言 ■实现原理:容器管理事务 ■代码实现简单描述: 2.EJB 标签 2.1.EJB中的有状态与无状态( @stateless/@stateful ) 2.1.@Stateless 与 @ ...

  5. Android - 应用安装、卸载、覆盖安装的广播及不生效原因解析

    转载请注明出处:https://blog.csdn.net/mythmayor/article/details/80653621 一.应用安装.卸载.覆盖安装的广播 最近想优化一下项目,因为应用是有自 ...

  6. Spring 使用注解方式进行事物管理

    Spring 使用注解方式进行事物管理 大家在使用spring的注解式事务管理时,对事务的传播行为和隔离级别可能有点不知所措,下边就详细的介绍下以备方便查阅. 事物注解方式: @Transaction ...

  7. linux开终端失败,Linux:终端提示符 (prompt) 不如期生效原因

    原标题:Linux:终端提示符 (prompt) 不如期生效原因 前言 先来简单介绍下, prompt是什么鬼? 顾名思义就是提示符的意思, 看起来和我们遥远, 但实际上只要是每个接触 shell的童 ...

  8. php 修改css 不生效,HTML外部引用CSS文件不生效原因分析及解决办法

    本文主要给大家介绍html外部引用css文件不生效的原因分析及解决办法,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧 作为一个前端小白,鼓捣了几天前端..今天突然发现我深信不疑的东西, ...

  9. springboot中注入FilterRegistrationBean不生效原因

    springboot中注入FilterRegistrationBean不生效原因 回顾 最近自定义了两个过滤器,接口请求返回加密和sql注入处理过滤器,因为在封装一些工具包,我在单独调好之后,就打算做 ...

最新文章

  1. log file switch (checkpoint incomplete)
  2. Base64编码原理与应用
  3. win8.1 php mysql,win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装
  4. java word转html 乱码 poi,java word转html poi
  5. PHP通过session判断防止表单重复提交实例
  6. moodeaudio 源码_MoodeAudio 音频播放器上手配置
  7. 需要gmail的朋友请留下你们的email,还有86个
  8. [php基础]Mysql日期函数:日期时间格式转换函数详解
  9. TechParty Mini+4 logging
  10. Android Audio架构
  11. 运维人员必会的系统安全
  12. javaee jsp实现留言板(eclipse+mysql),五个界面,留言、登陆、注册等
  13. 海量GIS文章,软件教程,GIs编程奉送!!(转)
  14. 【复盘1】政治+数学+英语+专业课
  15. Latex中插入.eps图片遇到的问题 (Unknown graphics extension:.eps)
  16. 分布式电源接入对配电网影响的研究(Matlab代码实现)
  17. 【Redis】redis cluster模式实现双机房容灾切换
  18. 【LeetCode】935. Knight Dialer 解题报告(Python)
  19. Linux读取串口数据
  20. 异常:java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher 解决办法

热门文章

  1. h5页面如何实现阻止关闭页面,或阻止刷新页面
  2. android仿秒拍源码,你所不知道的程序员 程序员其实真的很…【Bus Weekly】三十六期...
  3. 录音文件与Base64编码相互转换的方法
  4. 30岁一无所长,转行做什么合适?
  5. JAVA数据库连接(JDBS)
  6. java中final double_举例讲解Java中final关键字的用法
  7. vue.config.js配置说明
  8. 海康威视2022空宣
  9. 福大计算机国二,2020福建“最好大学”排名揭晓!福大第二,有2所进入全国100强!...
  10. android 物理键盘 字符,Android物理键盘事件解析