SpringBoot @Transactional的rollbackFor属性

 

 

一方面,我们可以将异常分为运行时异常(RuntimeException)和非运行时异常(Exception中除了RuntimeException及其子类以外的)。另一方面,我们可以将异常分为检查异常(checked exceptions)和非检查异常(unchecked exceptions)。

检查异常(checked exceptions):就是非运行时异常,即Exception中除了RuntimeException及其子类以外的。

非检查异常(unchecked exceptions):RuntimeException和Error。

2.、rollbackFor属性介绍

作者开发时遇到两个疑问:1.已注解了@Transactional的事务仍会有“出现异常事务不回滚”的情况?例如mybatis的xml配置<selectKey>标签错误时,运行报异常,但仍然能够进行增加操作。2.Java阿里巴巴规范提示,事务需要进行手动回滚。为什么?

因此,经作者百度后,得知如下原因:

Spring框架的事务管理默认地只在发生不检查异常(RuntimeException和Error)时才进行事务回滚。也就是说,当事务方法抛出受控异常(Exception中除了RuntimeException及其子类以外的)时不会进行事务回滚。

rollbackFor属性在这里就可以发挥它的作用了!

在类或方法前注解配置@Transactional(rollbackFor=Exception.class)就可以实现:

当发生检查异常(checked exceptions)时,事务也进行回滚。

posted @ 2020-12-02 09:41  姚春辉  阅读(1110)  评论(0编辑  收藏  举报