- 使用@Transactional注解,并指定rollbackFor属性为Exception.class或其子类,这样可以让checked异常也触发事务回滚。例如:
@Transactional(rollbackFor = Exception.class) public void someMethod() { try { // do something throw new Exception(); // checked exception } catch (Exception e) { // handle exception } }
- 在catch块中,使用TransactionAspectSupport类的currentTransactionStatus方法获取当前事务状态,然后调用setRollbackOnly方法手动设置事务回滚。例如:
@Transactional public void someMethod() { try { // do something throw new RuntimeException(); // unchecked exception } catch (RuntimeException e) { // handle exception TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // manual rollback } }
- 在事务方法中,使用TransactionAspectSupport类的currentTransactionStatus方法创建一个保存点,然后在catch块中,使用rollbackToSavepoint方法回滚到保存点,这样可以实现部分回滚。例如:
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; public class SomeService { // some dependencies @Transactional public void someMethod() { // do something before savepoint Object savepoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); // create savepoint try { // do something after savepoint throw new Exception(); // any exception } catch (Exception e) { // handle exception TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savepoint); // rollback to savepoint } // do something after catch } }
springboot项目增加事务异常回滚功能
于 2023-05-11 16:54:48 首次发布