引言 在springboot项目开发中,在与mysql数据库打交道时,常常会用到事务处理,但是有时候用了事务,往往不起作用,那是什么原因呢,又该从何着手解决呢? 事务失效常见场景
解决方案 mysql数据库引擎为MyISAM引擎,事务失效,解决方法为将MyISAM引擎修改为Innodb引擎即可。 原因:MyISAM不支持事务处理。Innodb支持事务回滚。 事务注解放到了controller层,事务失效,解决方法为将事务注解放置在实现类的方法里面。 原因:在java中,controller主要用来为视图和业务搭建桥梁,因此在spring的家族中,是不允许controller设置事务的。 事务注解的方法里捕获了异常,事务失效,解决方法为在捕获异常的块里添加如下代码即可生效
原因:不清楚。 非直接调用,事务失效,解决方法为事务对应的方法应直接在controller层直接调用,不允许在事务注解的方法对应的类上面继续调用该方法。 原因:不明确 事务注解在私有方法、保护方法上,事务失效,解决方法为将私有方法,保护方法统一设置为公共方法。 原因:在java中,私有变量、私有方法只允许自己类使用,不允许外用;保护变量,保护方法只允许自己和子类使用,不允许外用。 事务注解值的异常抛出不对,事务失效,解决方法,如不能明确异常,则在事务注解中添加Exception异常,如已明确对应异常,则在事务注解中添加对应异常即可。 原因:事务注解只能捕获对应的异常处理,如不指定,则默认捕获RunTimeException(运行时异常),比如常见的空指针。其他异常将无法捕获。 事务注解的方法里运行多线程,事务失效,解决方法为将多线程剔除,事务必须放在单个线程才能生效。 |
|
来自: 新用户57365882 > 《待分类》