spring+mybatis事务不起作用的原因
2017-04-07 11:04
357 查看
一、场景再现
@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 注解式事务不回滚的原因分析 @Transactional
- Spring事务不起作用原因
- spring事务不起作用的原因
- spring整合 mybatis 事务管理不生效原因
- Spring+Mybatis整合事务不起作用之…
- spring 事务管理不起作用原因分析与解决
- spring事务不起作用的原因
- spring事务不起作用的原因
- spring事务不起作用的原因
- spring整合 mybatis 事务管理不生效原因
- springMVC mybatis mysql 配置 事务不起作用的原因
- spring事务不起作用的原因
- spring 事务Propagation.REQUIRES_NEW 不起作用的原因
- spring事务不起作用的原因
- Spring+Mybatis整合事务不起作用之解决方案汇总
- spring aop+mybatis事务配置 junit起作用,tomcat不起作用
- Spring+Mybatis整合事务不起作用之解决方案汇总
- Mybatis整合Spring3,事务注解为何不起作用的解决办法
- spring事务不起作用的原因
- spring事务不起作用的原因