SpringBoot 事务不回滚可能有多种原因,下面列举一些常见的原因和对应的解决方法:
如果方法中抛出了异常,但是在方法中被捕获并处理了,那么事务不会回滚。解决方法是让异常继续抛出,或者使用 @Transactional 注解的 rollbackFor 属性指定回滚的异常类型。
如果事务方法被同一个类中的其他方法调用,而且这些方法没有使用 @Transactional 注解,那么事务不会起作用。解决方法是将事务方法放到一个单独的类中,或者使用 @Transactional 注解的 propagation 属性指定传播行为。
如果使用的数据库引擎不支持事务,那么事务不会起作用。解决方法是切换到支持事务的数据库引擎,比如 InnoDB。
如果事务方法没有被 Spring 托管,那么事务不会起作用。解决方法是将事务方法标记为 Spring 托管的 Bean,或者使用 AspectJ 代替 Spring AOP 来管理事务。
如果 @Transactional 注解被放到了错误的位置,比如放到了类的属性上,那么事务不会起作用。解决方法是将注解放到方法上,或者将属性转换成方法。
总的来说,SpringBoot 事务不回滚可能有多种原因,需要根据具体情况进行排查和解决。如果无法解决,可以考虑使用调试工具和日志来进一步查看问题的具体原因。
作者:lfsun666
链接:https://juejin.cn/post/7204121228016533565
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。