一、场景再现
@Override
@Transactional
public void updateById(String userId,String username) throws Exception {
sysUserDao.UpdatedById(userId,username);
if (1==1) {
throw new Exception("故意抛出测试...");
}
sysUserDao.UpdatedById(userId,username+"final");
}

以上就是不起作用的代码,经分析,问题就出在这段代码中。(applicationContext.xml 是标准配置,相信你不会配错)

二、问题分析
上述代码日志打出来后,竟然发现出异常后,事务尽然是commit;

2017-04-07 09:42:16,746 DEBUG-> Creating a new SqlSession
2017-04-07 09:42:16,754 DEBUG-> Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27c35069]
2017-04-07 09:42:16,766 DEBUG-> JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@592f13f0] will be managed by Spring
2017-04-07 09:42:16,855 DEBUG-> Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27c35069]
2017-04-07 09:42:16,857 DEBUG-> Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27c35069]
2017-04-07 09:42:16,857 DEBUG-> Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27c35069]
2017-04-07 09:42:16,857 DEBUG-> Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@27c35069]

后来查看文档发现这么一段

If no rules are relevant to the exception, it will be treated like DefaultTransactionAttribute (rolling back on runtime exceptions).

理解为:默认情况下,事务遇到运行时异常会回滚;而非运行期异常,事务是不会回滚的。

三、解决办法

解决办法很简单,告诉事务管理器,遇到非运行期异常,也同样需要回滚。

@Override
@Transactional(rollbackFor = {RuntimeException.class,Exception.class}) public void updateById(String userId,String username) throws Exception {
sysUserDao.UpdatedById(userId,username);
if (1==1) {
throw new Exception("故意抛出测试...");
}
sysUserDao.UpdatedById(userId,username+"final");
}

题外话:园子里可能很多还是奋战在.net领域的同学,作为一个在一线开发+管理多年经验的老鸟来看,同经验同水平的.net员比java员薪水低20%,级别越高,差距越大,结论就是,如果你想在后端发展,能转java尽早转,不能转创造条件转,.net可以作为兴趣来研究,java才是养家糊口的利器。

spring+mybatis事务不起作用的原因的更多相关文章

  1. spring,mybatis事务管理配置与@Transactional注解使用[转]

    spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...

  2. spring,mybatis事务管理配置与@Transactional注解使用

    spring,mybatis事务管理配置与@Transactional注解使用[转]   spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是 ...

  3. spring+mybatis事务管理

    spring+mybatis事务管理 最近在和朋友做一个项目,考虑用springmvc+mybatis来做,之前在公司工作吧,对于数据库这块的配置也有人再弄,最近因为这个项目,我就上网学习了一些关于数 ...

  4. SpringBoot 内部方法调用,事务不起作用的原因及解决办法

    在做业务开发时,遇到了一个事务不起作用的问题.大概流程是这样的,方法内部的定时任务调用了一个带事务的方法,失败后事务没有回滚.查阅资料后,问题得到解决,记录下来分享给大家. 场景 我在这里模拟一个场景 ...

  5. spring,mybatis事务

    概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型,比 ...

  6. spring+mybatis事务的readonly属性无效

    在Spring配置事务中设置的read-only="true"不起作用,仍可以执行写操作:但是其他的正常.查看了一下DataSourceTransactionManager这个类的 ...

  7. spring+mybatis事务配置(转载)

    原文地址:http://blog.csdn.net/wgh1015398431/article/details/52861048 申明式事务配置步骤 .xml文件头部需要添加spring的相关支持: ...

  8. spring mybatis 事务配置及使用

    转自:http://kinglixing.blog.51cto.com/3421535/723870

  9. Spring事务不起作用原因

    首先声明: Checked异常继承java.lang.Exception类.Unchecked异常继承自java.lang.RuntimeException类. 而,Spring的事务实现采用基于AO ...

随机推荐

  1. WP8.1程序开发中,如何加载本地文件资源或安装在程序包中的资源。

    Web 要访问来自 Web 的文件,你可以使用标准的绝对 HTTP URI: <img src="http://www.contoso.com/images/logo.png" ...

  2. 深入探讨 CSS 特性检测 @supports 与 Modernizr

    什么是 CSS 特性检测?我们知道,前端技术日新月异的今天,各种新技术新属性层出不穷.在 CSS 层面亦不例外. 一些新属性能极大提升用户体验以及减少工程师的工作量,并且在当下的前端氛围下: 很多实验 ...

  3. Mixin模式:带实现的协议

    Mixin(织入)模式并不是GOF的<设计模式>归纳中的一种,但是在各种语言以及框架都会发现该模式(或者思想)的一些应用.简单来说,Mixin是带有全部实现或者部分实现的接口,其主要作用是 ...

  4. [微信小程序-开发工具]快捷键

    1.进入快捷键  >  > 2.快捷键 1.元素面板 ↑↓:导航元素 →←:展开/折叠 Enter:编辑属性 H:隐藏元素 F2:切换编辑HTML 2.样式窗口 Tab/Shift + T ...

  5. [LeetCode] Is Subsequence 题解

    前言 这道题的实现方法有很多,包括dp,贪心算法,二分搜索,普通实现等等. 题目 Given a string s and a string t, check if s is subsequence ...

  6. TypeScript设计模式之工厂

    看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...

  7. HBase跨版本数据迁移总结

    某客户大数据测试场景为:Solr类似画像的数据查出用户标签--通过这些标签在HBase查询详细信息.以上测试功能以及性能. 其中HBase的数据量为500G,Solr约5T.数据均需要从对方的集群人工 ...

  8. TokuDB性能测试报告

    一 .背景介绍 近年来,TokuDB作为MySQL的大数据(Big Data)存储引擎受到人们的普遍关注.其架构的核心基于一种新的叫做分形树(Fractal Trees)的索引数据结构,该结构是缓存无 ...

  9. C#知识整理笔记

    这里简单介绍了一些常用的属性,以及一些术语的解释和举例说明,不太全面,希望读者多多补充. 1.重载:函数名相同,参数的个数或参数类型不同; public void MyDog(string s); p ...

  10. Struts2学习笔记②

    之前在跟着老师们做项目的时候经常会烦恼Struts.xml怎么配置,老师也没讲太清楚,都是说很简单,但是不懂的人就是太难了!哈哈,万事还是要靠自己的! struts.xml今天又看了几个小时的书,也跟 ...