spring 哪些事物会回滚

不及物动词 其他 16

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在Spring框架中,事务管理是一个常见的功能,可以确保在事务内的操作要么全部成功提交,要么全部回滚。回滚是指当事务执行过程中出现异常或者满足某些事务回滚的条件时,之前的操作会被撤销,恢复到事务开始之前的状态。那么在Spring中,会发生回滚的有以下几种情况:

    1. 默认情况下,Spring会将未受检异常(继承自RuntimeException或Error的异常)作为回滚触发的条件。当业务逻辑中发生这些未受检异常时,事务将会回滚。而受检异常(继承自Exception的异常)不会引起事务回滚。当然,我们也可以通过对应的配置进行自定义异常的回滚规则。

    2. 声明式事务管理中,通过注解或者XML配置来定义事务。在Spring的声明式事务中,可以通过@Transactional注解或者tx:advice来标注需要事务的方法,Spring会根据配置来决定执行方式。当方法中发生异常时,事务会回滚。

    3. 抛出指定的异常。在@Transactional注解中,可以通过设置rollbackFor属性来指定某些异常发生时触发事务回滚,即满足设定的异常类型时,事务会回滚。

    4. 事务传播行为。在Spring事务中,事务可以嵌套,即一个事务里可以包含多个事务。当嵌套事务发生异常时,只有发生异常的最外层事务会进行回滚,内部的事务会继续执行。而其他的传播行为如REQUIRED、REQUIRES_NEW等也会影响事务回滚的行为。

    5. 数据库的事务支持。如果使用的是支持事务的数据库,比如MySQL的InnoDB引擎,当数据库出现异常或者满足特定的条件时,Spring的事务管理器会发出回滚命令,让数据库回滚到之前的状态。

    综上所述,Spring中的事务回滚涉及到异常类型、配置方式、事务传播行为以及数据库支持。通过合理的配置和异常处理,可以实现对事务的有效管理和回滚操作。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在使用Spring框架开发应用程序时,有一些事物操作会被自动回滚。下面列举了几种常见的情况:

    1. RuntimeException及其子类:如果在事物中发生了未捕获的RuntimeException异常,会导致事物回滚。Spring框架会检测抛出的异常类型,如果是RuntimeException或其子类,会立即回滚整个事物。

    2. Error及其子类:与RuntimeException类似,如果在事物中发生了未捕获的Error异常,也会导致事物回滚。

    3. Checked Exception(已检查异常):默认情况下,Spring框架不会对已检查异常进行事物回滚。因为已检查异常通常表示业务逻辑的一部分,可能需要特定的处理。但是可以通过在@Transactional注解中使用rollbackFor属性来指定需要回滚的特定已检查异常。

    4. 默认回滚策略:如果在事物中没有捕获任何异常,并且事物执行过程中抛出了未被捕获的异常,Spring框架会将事物回滚。这是因为Spring默认将unchecked exception(即RuntimeException及其子类)作为事物回滚的触发条件。

    5. 编程式回滚:在程序中显式调用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()可以将当前事物设置为回滚状态,从而实现事物回滚。

    总结起来,Spring框架会在发生未捕获的RuntimeException、Error和未被捕获的异常时,自动回滚事物。此外,可以通过配置rollbackFor属性或编程式回滚来实现其他情况下的事物回滚。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring框架中的事务管理能够在满足一定条件的情况下自动回滚事务。以下是一些会触发事务回滚的情况:

    1. 运行时异常(unchecked exception):当方法中抛出未被捕获的运行时异常时,Spring会自动回滚事务。这包括类似NullPointerException、IllegalArgumentException等非检查异常。

    2. 受检查异常:当方法中抛出受检查异常时,Spring默认情况下不会回滚事务。但可以通过对异常进行配置,使其触发事务回滚。

    3. Error:当方法中抛出Error类型的错误时,Spring会自动回滚事务。Error是严重错误,通常无法通过捕获或处理来恢复。

    4. 默认回滚策略:Spring支持设置全局的默认回滚策略,可以通过设置rollbackFor属性或noRollbackFor属性来指定哪些异常会触发事务回滚。rollbackFor属性指定异常类,当方法中抛出该异常或其子类时,会触发事务回滚。而noRollbackFor属性指定异常类,当方法中抛出该异常或其子类时,不会触发事务回滚。

    5. 使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly():在方法中使用这个方法来将事务标记为回滚状态,此时无论方法是否正常执行完成,Spring都会回滚事务。

    值得注意的是,Spring的事务回滚默认只对在公共接口方法上进行。如果一个方法在类的内部调用另一个非公共方法,非公共方法会在调用结束后继续执行而不会触发事务回滚。想要在内部方法中也触发事务回滚,可以通过使用@Transactional注解将非公共方法标记为事务方法。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部