springboot的事务回滚问题
在springboot中开启事务:
在传统的xml配置⽂件中(spring传统)进⾏事务配置,然后开启事务。不过现在只需要在业务层(service)类上添加@Transactional注解即可开启事务管理。
在@Transactional注解中可以配置只读事务、回滚触发的异常等。
问题:配置了回滚触发的异常:rollbackfor = {Exception.class}
当⽅法中抛出任何⼀个异常的时候就会触发回滚,但是如果只是抛出异常⽽不进⾏捕获的话就会造成服务端返回500状态码,这不是服务器的理想返回状态,所以需要将这个异常捕获并包装返回⼀个封装好的错误数据格式。但是如果将数据库操作代码使⽤try/catch进⾏包裹,对异常进⾏捕获后,异常被捕获了,事务回滚却没有正常触发。
解决:在异常捕获代码块(catch代码块)中进⾏⼿动的事务回滚。
springboot的事务⼿动回滚:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
还可以设置代码回滚点来部分回滚事务:
springframework事务使⽤Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); 设置回滚点,
使⽤TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); 回滚到savePoint。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。