Spring事务注解@Transactional失效的问题

Posted OverZeal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring事务注解@Transactional失效的问题相关的知识,希望对你有一定的参考价值。

在项目中发现事务失效,使用@Transactional注解标注的Service业务层实现类方法全部不能回滚事务了,最终发现使用因为Spring与shiro进行整合之后导致的问题,将所有的Service层实现类都添加如下注解

@Scope(proxyMode= ScopedProxyMode.TARGET_CLASS)

将代理方式换成CGLib的代理方式之后得以解决,最终不明原因,如有看到这篇博客并知道答案的朋友请留言告知

如果事务不能回滚,也需要考虑如下几点:

  • 表得存储引擎为MyISAM是没有事务的,需要使用InnoDB
  • 加事务的方法中手动try...catch住了异常,只有将异常抛出来(无论是主动还是被动)事务才能回滚
  • Spring事务默认回滚的是RunTimeException运行时异常,如果是check异常是不会回滚的,可以指定回滚异常,如下
@Transactional(rollbackFor = Exception.class)

只要出现异常就进行回滚

以上是关于Spring事务注解@Transactional失效的问题的主要内容,如果未能解决你的问题,请参考以下文章

Spring 事务注解@Transactional

Spring 之注解事务 @Transactional

Spring声明式事务注解@Transactional详解

Spring学习之事务注解@Transactional

Spring事务注解@Transactional失效的问题

Spring声明式事务注解@Transactional