ITPub博客

首页 > IT职业 > IT职场 > spring 事务深入 -事务失效

spring 事务深入 -事务失效

IT职场 作者:mocow 时间:2021-09-09 08:51:35 0 删除 编辑

事务失效的几种原因:

1.spring的事务注解@Transactional只能放在public修饰的方法上才起作用,如果放在其他非public(private,protected)方法上,虽然不报错,但是事务不起作用

2.如使用mysql且引擎是MyISAM,则事务会不起作用,原因是MyISAM不支持事务,可以改成InnoDB引擎。

 

3.默认情况下,Spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。

什么是unchecked异常,什么是checked异常?

java里面将派生于Error或者RuntimeException(比如空指针,1/0)的异常成为unchecked异常,其他继承自java.lang.Exception的异常统称为checked Exception,如IOException、TimeOutException等

 

通俗点讲就是,写的代码出现了空指针异常,会被回滚,而文件读写,网络出问题,spring就没法回滚了。

 

写代码的时候,有些IOException我们的编译器能够检测到的,所以说叫checked异常,写代码的时候空指针异常时检测不到的,所以叫unchecked异常。
在业务代码中如果抛出RuntimeException异常,事务回滚;但是抛出Exception,事务不回滚;

 

 

4.如果在加有事务的方法内,使用了try...catch..语句块对异常进行了捕获,而catch语句块没有throw new RuntimeExecption异常,事务也不会回滚

 

5. 在类A里面有方法a 和方法b, 然后方法b上面用 @Transactional加了方法级别的事务,在方法a里面 调用了方法b, 方法b里面的事务不会生效。

    原因是在同一个类之中,方法互相调用,切面无效 ,而不仅仅是事务。这里事务之所以无效,是因为spring的事务是通过AOP实现的。 

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2815/viewspace-2796806/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-17

  • 博文量
    108
  • 访问量
    1365