1. 发生自调用

解决办法使用bean对象来调用方法,因为使用bean调会有AOP。

  1. 方法不是public的

@Transactional 只能用于 public 的方法上,否则事务不会失效,如果要用在非 public 方法上,可 以开启 AspectJ 代理模式。

  1. 数据库不支持,或者数据源没有配置事务管理器

  2. 没有被Spring管理

没有被@Service注解标识

  1. 事务传播不启动事务

使用了Propagation.NOT_SUPPORTED,表示不以事务运行,当前若存在事务则挂起

  1. 异常被吃掉,事务不会回滚(或者抛出的异常没有被定义,默认为RuntimeException)