##########################万能分割线#########################

最近在使用springmvc结合mysql开发时候,遇到一个问题,基于注解的事务配置在程序运行中事务无效,即不进行事务回滚。下面说说如何解决该问题......

(现在常规MySQL都是使用INNODB存储引擎,即都是支持事务的)

############################################################

<1>代码块:[service层的staffService.java]

        @Transactional(rollbackFor = Exception.class)public Map<String,Object> deleteStaffByIds(Long currentStaffId,List<Long> staffsidList,List<Long> merchantsId,Long cityId) throws Exception {......try {//删除人员商户表信息staffDao.deleteStaffMerchant(staffsidList,merchantsId);//删除人员角色表信息staffDao.deleteStaffRole(staffsidList);//删除人员城市表信息staffDao.deleteStaffCity(staffsidList,cityId);} catch (Exception e) {log.error("关联删除人员信息失败,失败信息: "+e.getMessage());logService.insertWebLog(currentStaffId, sOperateClass, sMethodName, "失败",retMesg);throw e;}....}

上述代码块使用了基于@Transaction注解事务进行回滚设置,测试设置:使得在删除deleteStaffMerchant、deleteStaffRole方法成功后,设置最后的deleteStaffCity方法在执行操作数据库时候跑出异常,正常情况即事务回滚的情况下,前面两个方法删除的记录会恢复,进行事务回滚。但是在测试时候发现并没有执行事务回滚。

之后,检查了配置文件:

<2>applicationContext.xml配置:

 <!-- 设置需要进行Spring注解扫描的类包 --><context:component-scan base-package="com.xianSky" /><!-- 配置事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"p:dataSource-ref="dbDataSource"></bean><!-- 注解事务 --><tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

数据库连接池与事务管理器,注解扫描都没有问题....之后又查看了springMVC配置文件

<3>springMVC-servlet.xml配置:

    <!-- 当我们需要controller返回一个map的json对象时,可以设定<mvc:annotation-driven /> --><mvc:annotation-driven /> <!-- 设置需要进行Spring注解扫描的类包 --><context:component-scan base-package="com.xianSky" />

配置了简单的注解驱动与注解扫描包....似乎也是没有问题

之后结合该篇文章所说:http://blog.csdn.net/z69183787/article/details/37819831
更深入的了解到了,当web容器启动时候,会初始化两个容器,在容器装配bean时候会根据配置的扫描表进行装配。问题就在这了,对项目的三层所有类扫描会进行两次。

第一次是applicationContext配置对应的容器,第二次是springMVC配置文件对应的子容器。

注意到上述的配置文件:<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> 该段配置事务注解是放在applicationContext中,即只是对父容器中扫描的类具有注解事务功能,在springMVC中的配置并没有配置该内容,所以造成了:

在第一次扫描装配bean时候,bean是具有事务功能的。但是在springmvc二次扫描情况下,会覆盖父类容器中扫描的bean功能,因为没有配置注解驱动,所以就在service代码中不支持事务回滚,尽管加上了事务注解。所以有两种解决方法:

A:在springMVC子容器扫描包的时候,不扫描使用到事务的service层的所有类。在springMVC-servlet.xml中配置:

 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" ><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />    </tx:annotation-driven>

这样就不会将具有事务功能的service层的类进行扫描和功能覆盖。

B:将父类applicationContext.xml配置文件中的事务注解驱动配置代码:<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

从父类配置文件中剪切到子容器springMVC-servlet.xml中,这样,在子容器进行bean装配扫描时候,就具备了事务功能。

 <!-- 设置需要进行Spring注解扫描的类包 --><context:component-scan base-package="com.cybbj" /><tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

至此...............done.

解决基于SpringMVC+MYSQL注解@Transaction事务无效问题相关推荐

  1. SpringMVC @Transactional注解方式事务失效的解决办法

    搞了好久,网上找了好多文章,试了好多都没用,原来是我整合的Redis有问题 可以去参考一下这个 http://blog.csdn.net/z69183787/article/details/37819 ...

  2. maven+springMVC+mysql+mybatis+velocity+事务整合

    花了一整天来从新研究这些框架的整合已经如何使用,先整理如下: 本文着手搭建SSM环境.主要过程如下: 1.搭建maven环境: 2.整合springMVC: 3.整合数据源(mysql): 4.整合m ...

  3. 基于springmvc+mysql+mybatis实现用户登陆功能

    最近在学习springmvc框架,每天的学习过程中颇有一些收获,打算写一篇博客记录一下,也希望能帮到同样在学这个的人. 一:Springmvc 1:SpringMVC的组成结构: (1)前端控制器(D ...

  4. MySQL高并发事务问题

    事务的概念 事务 可以理解为一个 独立的工作单元, 在这个独立的工作单元中, 有一组操作; 放在事务(独立工作单元)中的多个操作, 要么全部执行成功, 要么全部执行失败. 不免俗套, 这还是通过最经典 ...

  5. spring mysql 注解_【Spring】SpringMVC之基于注解的实现SpringMVC+MySQL

    目录结构: contents structure [-] SpringMVC是什么 MVC的全称是Model View Controller,通过实现MVC框架可以很好的数据.视图.业务逻辑进行分离. ...

  6. MySQL中基于XA实现的分布式事务

    文章目录 一.前言 二.XA基础 2.1 XA基础知识 2.1.1 DTP是什么? 2.1.2 DTP的结构:AP TM RM(重点001) 2.1.3 DTP的重要概念 2.2 XA事务:基于两阶段 ...

  7. 从源码分析 Spring 基于注解的事务

    从源码分析 Spring 基于注解的事务 在spring引入基于注解的事务(@Transactional)之前,我们一般都是如下这样进行拦截事务的配置: <!-- 拦截器方式配置事务 --> ...

  8. MySQL 中基于 XA 实现的分布式事务

    五.MySQL 中基于 XA 实现的分布式事务 5.1 XA协议 首先我们来简要看下分布式事务处理的XA规范 可知XA规范中分布式事务有AP,RM,TM组成: 其中应用程序(Application P ...

  9. 解决IDEA使用lombok注解无效,@Data不生效问题

    解决IDEA使用lombok注解无效,@Data不生效问题 参考文章: (1)解决IDEA使用lombok注解无效,@Data不生效问题 (2)https://www.cnblogs.com/houz ...

最新文章

  1. 反向词典_根据描述查找词语
  2. powerdesigner 新建按钮是灰色的
  3. SpringCloud教程- 服务消费者(Feign)(SpringCloud版本Finchley)
  4. 时间序列研(part5)--四种典型的非平稳随机过程
  5. python硬件交互_Python操作系统库说明,pythonos,笔记
  6. Comet OJ-栈的数据结构题【线段树】
  7. 主板螺丝是机箱配还是主板配_要配新电脑,A520主板和B450主板哪一个更加值得购买?...
  8. oracle数据库日期加一,日期和Oracle数据库
  9. Citrix 服务器虚拟化之三十一 XenApp 6.5负载均衡
  10. 如果创建表提示数据库已经存在该对象,那该怎么办
  11. 21-7-28 git学习复习
  12. 法制教育对未成年人的作用和实施字体
  13. 计算机,通信,自动化等方向期刊排名
  14. Flurry使用初级教程
  15. 微信扫码充值 php,PHP原生微信扫码支付
  16. matlab 不显示图中坐标轴(不显示x、y、z轴)
  17. 为什么很多人吐槽谭浩强的C语言程序设计?
  18. python2升级python3语法错误总结
  19. 图书资源下载网站收集
  20. 计算机cpu的风扇是多少电压,哪位知道cpu风扇电压是多少?

热门文章

  1. gocolly-字符串cookies处理(4)
  2. 使用计算机设备管理办法,计算机设备管理实施办法
  3. CKA2020考试血泪史
  4. win7:windows time服务问题,自启及配置
  5. Day46(列表标签,表格标签,表单标签,css的引入方式,css选择器)
  6. [STM32] Mac开发STM32之Makefile
  7. Ros智能小车麦克纳姆轮、橡胶轮的加紧固办法、轮子紧固不脱离
  8. Android Pie(9.0) 行为变更
  9. Unreal Engine 4 —— 禅意花园项目中的水池
  10. 厉害!中国硬核技术打破美国纪录