首页 > 程序开发 > web前端 > JavaScript > 正文
Spring事务管理——回滚(rollback-for)控制
2017-06-19       个评论    来源:奔跑的蜗牛  
收藏    我要投稿

Spring事务管理——回滚(rollback-for)控制

探讨Spring事务控制中,异常触发事务回滚原理。文章进行了6种情况下的Spring事务是否回滚。
以下代码都是基于Spring与Mybatis整合,使用Spring声明式事务配置事务方法。

1.不捕获异常(一般处理方式)

代码,其中contentMappger.updateWithErrTest(31L); 是SQL语句错误,用来测试回滚。


    
        
    

    
    
        
        
            
            
            
            
            
            
            
            
            
        
    
    
    
        
    
    /**
     * 删除多条记录
     * @throws Exception 
     */
    @Override
    public ShopResult deleteContentGroup(String[] ids) throws Exception {
        if (null == ids || ids.length == 0)
        {
            return ShopResult.error();
        }
        for (String idStr : ids)
        {
            Long id = new Long(idStr);
            contentMappger.deleteByPrimaryKey(id);
        }
        try {
            contentMappger.updateWithErrTest(31L);   //错误代码,SQL语句错误。用来测试事务,看是否回滚
        } catch (Exception e) {
            //捕获异常,继续抛出
            System.out.println("-----throw new Exception-------");
            throw new Exception("---自定义Exception,事务中已配置rollback-for---");
        }
        return ShopResult.ok();
    }

运行结果:如预期一样发生回滚

### The error may involve com.shop.manager.mapper.TbContentMapper.updateWithErrTest-Inline
### The error occurred while setting parameters
### SQL: delete form tb_content    where kid = ?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'tb_content
    where kid = 31' at line 1
]
-----throw new Exception-------
2017-06-18 15:07:02,273 [http-bio-8080-exec-8] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f177061]
2017-06-18 15:07:02,273 [http-bio-8080-exec-8] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@f177061]

总结:

Spring事务管理是根据异常来进行回滚操作; Spring与Mybatis整合时,虽然在Service方法中并没有check异常,但是如果数据库有异常发生,默认会进行事务回滚。 Spring 如果不添加rollbackFor等属性,Spring碰到Unchecked Exceptions都会回滚,不仅是RuntimeException,也包括Error。 如果在事务方法中捕获异常并进行处理,一定要继续抛出异常并在Spring事务管理中进行rollbak-for配置。
点击复制链接 与好友分享!回本站首页
上一篇:JavaScript的BOM对象
下一篇:最后一页
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 |
版权所有: 88bifa.com--致力于做实用的IT技术学习网站