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

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

@Scope(proxyMode= ScopedProxyMode.TARGET_CLASS)

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

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

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

只要出现异常就进行回滚

猜你喜欢

转载自www.cnblogs.com/lz2017/p/11657880.html