1.在方法中捕获的异常没有抛出去
2.非事务方法调用事务方法
3.事务方法内部调用事务方法
4.@Transactional标记的方法不是public
5.抛出的异常与rollbackFor指定的异常不匹配
6.数据库表不支持事务,比如MySQl和MyISAM
7.Spring的传播行为导致事务失效,比如,PROPAGATION_NEVER、PROPAGATION_SUPPORTED
- PROPAGATION_REQUIRED——支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择
- PROPAGATION_SUPPORTS——支持当前事务,如果当前没有事务,则以非事务方式执行
- PROPAGATION_MANDATORY——支持当前事务,如果当前没有事务,就抛出异常
- PROPAGATION_REQUIRES_NEW——新建事务,如果当前存在事务,就把当前事务挂起
- PROPAGATION_NOT_SUPPORTED——以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
- PROPAGATION_NEVER——以非事务方式执行,如果当前存在事务,则抛出异常
- PROPAGATION_NESTED——如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则与PROPAGATION_REQUIRED类似