zoukankan      html  css  js  c++  java
  • SpringBoot @Transactional的rollbackFor属性

    1.简单回顾Java Exception

    该图摘自:https://blog.csdn.net/zhangerqing/article/details/8248186

    一方面,我们可以将异常分为运行时异常(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)时,事务也进行回滚。

    “rollbackFor”相关知识摘自https://blog.csdn.net/qq_16605855/article/details/79653282

  • 相关阅读:
    Windows常用内容渗透命令
    字符串编码小记
    卡巴斯基命令解析
    聚合与继承
    Maven与Eclipse整合
    maven系列三:Maven核心概念
    使用Maven构建项目
    Maven项目构建过程练习
    maven系列二:Maven入门
    使用Maven构建多模块项目
  • 原文地址:https://www.cnblogs.com/jpfss/p/11152338.html
Copyright © 2011-2022 走看看