您的位置:首页 > 编程语言 > Java开发

Spring添加了注解@Transactional事务不回滚总结

2017-08-29 11:55 453 查看
一、很久之前遇到过一次Spring添加了注解@Transactional可测试的时候没有回滚;忽然想起来。就总结一下,作为一个记录。能帮到别人更好;

二、总结

1.首先你要确保你的配置文件正确,当然这个可能性很低,因为架构师都帮你弄好了;

2.如果你的配置文件都正确,那么很有可能你执行数据库更新、插入的时候加了 try  catch 了,所以不回滚。原因如下:

@Transactional标签(Spring事务)需要异常去触发他才能回滚,设置类型默认就好,也可以手动设置触发异常的类型(这个不做讲解,不是本文重点);

如果你加了 try catch语句,就相当于把异常吞了,这样当然没法触发事务,让事务回滚;

3.解决方案:

a.去除掉try  catch ,但是如果框架没统一处理异常这样会有风险;但是你可以把try catch 转移到最外层比如 controller层;

b.可以保留try catch ,但是catch里边打印错误日志之后,要手动 throw new Except(或者你自定义的异类型);如果打算这么做,建议就直接抛自定义的异常,还简单明了易于排查;

c.个人建议,try catch 转移到最外层比如controller,然后每次 更新或者插入操作时,对影响行数进行判断,如果小于1,直接手动抛出更新失败的自定义异常,触发事务回滚。

三、一切没有代码的总结都是耍流氓,我贴一段示例:

下图为手动抛出异常;



下图为最外层统一try catch处理异常,当然也可以不try catch 交给框架统一定义好的异常 让框架处理,具体看自己架构

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: