当前位置: 首页 > 面试题库 >

Spring transaction:在Exception或Throwable上回滚

东方俊材
2023-03-14
问题内容

我想知道使用代替

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

使用 Throwable

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)

据我了解Error,即使发生了某些非常糟糕的事件,捕获也会帮助我们正确地进行行为。还是没有帮助?


问题答案:

据我了解,即使发生某些非常糟糕的事件,捕获错误也会帮助我们正确地执行操作。还是没有帮助?

你不需要显式指定rollbackFor = Throwable.class,因为默认情况下,如果Error发生交易,spring会默认回滚事务。

请参见12.5.3回滚声明式事务

在默认配置中,Spring框架的事务基础结构代码仅在运行时,未经检查的异常的情况下将事务标记为回滚。也就是说,当抛出的异常是RuntimeException的实例或子类时。(默认情况下,错误也会导致回滚)。从事务方法引发的检查异常不会导致默认配置中的回滚。

或看看 DefaultTransactionAttribute

public boolean rollbackOn(Throwable ex) {
    return (ex instanceof RuntimeException || ex instanceof Error);
}


 类似资料:
  • 问题内容: 我知道 有一个相当大的开销,因为它创建了一个完整的堆栈跟踪,等 不 出现同样的问题?此行为是继承的,还是抛出Throwable的开销较小(否)? 编辑 从 分析师的 角度来看,用户输入错误的密码是程序正常执行顺序的例外。所以,如果我有: 从 分析师的 角度来看,抛出UserNotValidException听起来是正确的。如果您的代码具有很好的抽象性,则 返回或听起来不正确。我只是想知

  • 问题内容: 有时候,我看到 而有时 有什么区别? 问题答案: 通过捕获,它包含了子类化的东西。通常,您不应该这样做,除非可能是在您要记录的线程的最高“捕获所有”级别,或者绝对要处理可能出错的所有内容。这将是一个框架型应用程序(例如应用程序服务器或一个测试框架),它可以运行未知代码,不应受到影响比较典型的 事情 是去错代码,尽可能多地。

  • 主要内容:1 Java.lang Throwable介绍,2 Java.lang Throwable声明,3 Java.lang Throwable方法1 Java.lang Throwable介绍 java.lang.Throwable 类是在Java语言中所有错误和异常的超类。只有在这个类(或它的一个子类)的实例对象由Java虚拟机抛出,也可以由Java throw语句抛出。 2 Java.lang Throwable声明 3 Java.lang Throwable方法 方法 描述 Thro

  • 我正试图在Java9上运行我的Spring Boot应用程序,但我遇到了JAXB问题,这在指南中有描述,但对我不起作用。我添加了对JAXB api的依赖,应用程序开始工作。如果由于缺少JAXB缺少使用Java version>=9的实现而出现以下异常:

  • 主要内容:异常是什么,异常的基本使用,Try、throw 和 catch,实例解释:,创建一个自定义的 Exception 类,实例解释:,多个异常,实例解释:,重新抛出异常,实例解释:,设置顶层异常处理器,异常的规则异常用于在指定的错误发生时改变脚本的正常流程。 异常是什么 PHP 5 提供了一种新的面向对象的错误处理方法。 异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。这种情况称为异常。 当异常被触发时,通常会发生: 当前代码状态被保存 代码执行被切换到预定义(自定义)的异常

  •  Exception 类是用来生成“异常”对象的类。  其构造函数的格式如下。 newException(<异常消息(message)>)  异常消息会被传递给生成的对象的 message 属性中。  此外,trace 属性中会保存直到异常发生为止的通过的函数相关的信息 ( 为了由人来阅读,这些信息被保存为字符串的形式 )。  因为脚本以外的原因而产生的异常对象都是 Exception 类的对象