如何设置@Transactional注解的回滚条件?

2026-06-10 09:008阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计705个文字,预计阅读时间需要3分钟。

如何设置@Transactional注解的回滚条件?

异常分类:- 可查的异常(Checked Exceptions):Exception 下除了 RuntimeException 外的异常,如 IOException、SQLException 等。- 不可查的异常(Unchecked Exceptions):RuntimeException 及其子类和错误(Error)。- @Transactional 注解属性详解: - 属性类型:void - 作用:用于声明方法或类为事务管理,确保方法执行过程中的操作要么全部成功,要么全部回滚。 - 详解:通过该注解,Spring 框架会自动管理事务的开始、提交和回滚,从而保证数据的一致性。

异常分类

  • 可查的异常(checked exceptions):Exception下除了RuntimeException外的异常
  • 不可查的异常(unchecked exceptions):RuntimeException及其子类和错误(Error)

@Transactional注解属性详解

属性 类型 描述 value String 可选的限定描述符,指定使用的事务管理器 propagation enum: Propagation 可选的事务传播行为设置 isolation enum: Isolation 可选的事务隔离级别设置 readOnly boolean 读写或只读事务,默认读写 timeout int (in seconds granularity) 事务超时时间设置 rollbackFor Class对象数组,必须继承自Throwable 导致事务回滚的异常类数组 rollbackForClassName 类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组 noRollbackFor Class对象数组,必须继承自Throwable 不会导致事务回滚的异常类数组 noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数

@Transactional

使用@Transaction注解时,阿里巴巴代码规范插件会提醒需要指定rollbackFor以显示的rollback

默认情况下,Spring框架在使用@Transaction处理事务时默认只在抛出运行时异常和unchecked exceptions时才会事务回滚。也就是说,当抛出个RuntimeException 或其子类例的实例时,从事务方法中抛出的Checked exceptions将不被标识进行事务回滚。

如何设置@Transactional注解的回滚条件?

  • 让checked异常回滚:在整个方法前加上 @Transactional(rollbackOn=Exception.class)
  • 让unchecked异常不回滚: @Transactional(dontRollbackOn=RunTimeException.class)
  • 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

注意:

  • 如果异常被try-catch了,事务就不会回滚,如果想让事务回滚必须再往外抛try{}catch{throw Exception}。
  • Spring团队的建议在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现的任何接口上。也可以在接口上使用 @Transactional 注解,但是这种情况需要设置基于接口的代理时才生效
  • @Transactional 注解标识的方法,建议处理过程尽量的简单。尤其是带锁的事务方法,能不放在事务里面的最好不要放在事务里面。可以将常规的数据库查询操作放在事务前面进行,而将增、删、改等操作放在事务中

本文共计705个文字,预计阅读时间需要3分钟。

如何设置@Transactional注解的回滚条件?

异常分类:- 可查的异常(Checked Exceptions):Exception 下除了 RuntimeException 外的异常,如 IOException、SQLException 等。- 不可查的异常(Unchecked Exceptions):RuntimeException 及其子类和错误(Error)。- @Transactional 注解属性详解: - 属性类型:void - 作用:用于声明方法或类为事务管理,确保方法执行过程中的操作要么全部成功,要么全部回滚。 - 详解:通过该注解,Spring 框架会自动管理事务的开始、提交和回滚,从而保证数据的一致性。

异常分类

  • 可查的异常(checked exceptions):Exception下除了RuntimeException外的异常
  • 不可查的异常(unchecked exceptions):RuntimeException及其子类和错误(Error)

@Transactional注解属性详解

属性 类型 描述 value String 可选的限定描述符,指定使用的事务管理器 propagation enum: Propagation 可选的事务传播行为设置 isolation enum: Isolation 可选的事务隔离级别设置 readOnly boolean 读写或只读事务,默认读写 timeout int (in seconds granularity) 事务超时时间设置 rollbackFor Class对象数组,必须继承自Throwable 导致事务回滚的异常类数组 rollbackForClassName 类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组 noRollbackFor Class对象数组,必须继承自Throwable 不会导致事务回滚的异常类数组 noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数

@Transactional

使用@Transaction注解时,阿里巴巴代码规范插件会提醒需要指定rollbackFor以显示的rollback

默认情况下,Spring框架在使用@Transaction处理事务时默认只在抛出运行时异常和unchecked exceptions时才会事务回滚。也就是说,当抛出个RuntimeException 或其子类例的实例时,从事务方法中抛出的Checked exceptions将不被标识进行事务回滚。

如何设置@Transactional注解的回滚条件?

  • 让checked异常回滚:在整个方法前加上 @Transactional(rollbackOn=Exception.class)
  • 让unchecked异常不回滚: @Transactional(dontRollbackOn=RunTimeException.class)
  • 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

注意:

  • 如果异常被try-catch了,事务就不会回滚,如果想让事务回滚必须再往外抛try{}catch{throw Exception}。
  • Spring团队的建议在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现的任何接口上。也可以在接口上使用 @Transactional 注解,但是这种情况需要设置基于接口的代理时才生效
  • @Transactional 注解标识的方法,建议处理过程尽量的简单。尤其是带锁的事务方法,能不放在事务里面的最好不要放在事务里面。可以将常规的数据库查询操作放在事务前面进行,而将增、删、改等操作放在事务中