@Transactional 与 @Transactional(rollbackFor) 的区别:深入理解事务回滚机制

在 Spring 中,@Transactional 注解用于标注方法,使其拥有事务特性。默认情况下,@Transactional 会捕获所有 'runtime' 异常并触发事务回滚。而 @Transactional(rollbackFor) 则可以指定在遇到哪些异常时触发事务回滚。

1. @Transactional 默认行为:

  • @Transactional 默认情况下会捕获所有 'RuntimeException' 和 'Error' 类型的异常,并触发事务回滚。
  • 对于 'CheckedException' 类型的异常,默认情况下不会触发事务回滚。

2. @Transactional(rollbackFor) 的作用:

  • @Transactional(rollbackFor) 允许你指定哪些异常会导致事务回滚。
  • 你可以通过 rollbackFor 属性指定一个或多个异常类。
  • 例如,@Transactional(rollbackFor = {MyException.class}) 表示只有遇到 'MyException' 异常时才会触发事务回滚。

3. 示例:

@Transactional
public void method1() {
  // ...
  throw new RuntimeException("发生运行时异常");
  // ...
}

@Transactional(rollbackFor = {MyException.class})
public void method2() {
  // ...
  throw new MyException("自定义异常");
  // ...
}

总结:

  • 使用 @Transactional 默认行为,只有 'RuntimeException' 和 'Error' 会导致事务回滚。
  • 使用 @Transactional(rollbackFor) 可以自定义哪些异常会导致事务回滚。
  • 根据实际需求选择合适的策略,以确保你的事务行为符合预期。
@Transactional 与 @Transactional(rollbackFor) 的区别:深入理解事务回滚机制

原文地址: https://www.cveoy.top/t/topic/nQJ8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录