我是靠谱客的博主 微笑马里奥,最近开发中收集的这篇文章主要介绍springboot加了事务处理不生效原因以及解决方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如需转载,请联系作者授权,否则禁止转载

引言

在springboot项目开发中,在与mysql数据库打交道时,常常会用到事务处理,但是有时候用了事务,往往不起作用,那是什么原因呢,又该从何着手解决呢?
在这里插入图片描述

事务失效常见场景

  • mysql数据库引擎为MyISAM引擎,事务失效

  • 事务注解放到了controller层,事务失效

  • 事务注解的方法里捕获了异常,事务失效

  • 非直接调用,事务失效

  • 事务注解在私有方法、保护方法上,事务失效

  • 事务注解值的异常抛出不对,事务失效

  • 事务注解的方法里运行多线程,事务失效

在这里插入图片描述

解决方案

**mysql数据库引擎为MyISAM引擎,事务失效,**解决方法为将MyISAM引擎修改为Innodb引擎即可。

原因:MyISAM不支持事务处理。Innodb支持事务回滚。

事务注解放到了controller层,事务失效,解决方法为将事务注解放置在实现类的方法里面。

原因:在java中,controller主要用来为视图和业务搭建桥梁,因此在spring的家族中,是不允许controller设置事务的。

事务注解的方法里捕获了异常,事务失效,解决方法为在捕获异常的块里添加如下代码即可生效

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
原因:不清楚。

非直接调用,事务失效,解决方法为事务对应的方法应直接在controller层直接调用,不允许在事务注解的方法对应的类上面继续调用该方法。

原因:不明确

事务注解在私有方法、保护方法上,事务失效,解决方法为将私有方法,保护方法统一设置为公共方法。

原因:在java中,私有变量、私有方法只允许自己类使用,不允许外用;保护变量,保护方法只允许自己和子类使用,不允许外用。

事务注解值的异常抛出不对,事务失效,解决方法,如不能明确异常,则在事务注解中添加Exception异常,如已明确对应异常,则在事务注解中添加对应异常即可。

原因:事务注解只能捕获对应的异常处理,如不指定,则默认捕获RunTimeException(运行时异常),比如常见的空指针。其他异常将无法捕获。

事务注解的方法里运行多线程,事务失效,解决方法为将多线程剔除,事务必须放在单个线程才能生效。

如需转载,请联系作者授权,否则禁止转载
如需转载,请联系作者授权,否则禁止转载

最后

以上就是微笑马里奥为你收集整理的springboot加了事务处理不生效原因以及解决方法的全部内容,希望文章能够帮你解决springboot加了事务处理不生效原因以及解决方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部