@Transactional 中rollbackOn和rollbackFor区别
时间: 2024-07-15 14:00:49 浏览: 135
`@Transactional` 是Spring框架中的一个注解,用于声明一个方法或者一个类需要被事务管理。它提供了几个属性来控制事务的行为,其中`rollbackOn`和`rollbackFor`都是用来指定在特定异常发生时是否应该回滚事务。
1. `rollbackOn`: 这个属性接受一个异常类型或一个异常类型列表,表示当这些类型的异常被抛出时,Spring会自动回滚事务。例如:
```java
@Transactional(rollbackOn = SomeCustomException.class)
```
如果在方法执行过程中抛出了`SomeCustomException`,则事务将被回滚。
2. `rollbackFor`: 与`rollbackOn`类似,但它接收的是一个异常条件,通常是一个`Throwable`的子类或者实现了特定接口的异常处理器(如`ExceptionHandler`)。它允许你基于更复杂的条件来决定是否回滚事务,比如处理程序返回true或者满足某个断言。例如:
```java
@Transactional(rollbackFor = ExceptionHandlerReturningTrue.class)
```
如果`ExceptionHandlerReturningTrue`的处理逻辑返回了`true`,那么也会触发事务回滚。
总结来说,`rollbackOn`更直接,根据异常类型直接决定是否回滚;而`rollbackFor`则提供了更大的灵活性,可以基于更复杂的条件判断事务是否需要回滚。在使用时,你可以根据实际需求选择合适的方式。相关问题如下:
阅读全文