springboot的事务回滚问题

在springboot中开启事务:

在传统的xml配置文件中(spring传统)进行事务配置,然后开启事务。不过现在只需要在业务层(service)类上添加@Transactional注解即可开启事务管理。

 

在@Transactional注解中可以配置只读事务、回滚触发的异常等。

问题:配置了回滚触发的异常:rollbackfor = {Exception.class}

当方法中抛出任何一个异常的时候就会触发回滚,但是如果只是抛出异常而不进行捕获的话就会造成服务端返回500状态码,这不是服务器的理想返回状态,所以需要将这个异常捕获并包装返回一个封装好的错误数据格式。但是如果将数据库操作代码使用try/catch进行包裹,对异常进行捕获后,异常被捕获了,事务回滚却没有正常触发。

解决:在异常捕获代码块(catch代码块)中进行手动的事务回滚。

 

springboot的事务手动回滚:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

还可以设置代码回滚点来部分回滚事务:

使用Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); 设置回滚点,
使用TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); 回滚到savePoint。


posted @ 2021-03-05 14:46  果冻dd  阅读(592)  评论(0)    收藏  举报