@Transactional失效的场景

  1. 注解加载非public的方法上 应为spring是通过aop实现事务的,查看源码发现,非public的方法是不会被aop拦截的

  2. 事务设置的传播级别设置错误 以下级别是不会回滚事务的

    a.TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

    b.TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。

    c.TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。

  3. rollbackFor 可以设定指定的异常情况下回滚,如果没有发生指定的异常就不会滚 默认是只要有异常就抛出unChecked异常

  4. 一个方法调用同一个类型的方法,这也是aop代理造成的,因为只有外部的方法调用本类,然后走aop代理才会生成事务

  5. 异常信息在代码中catch掉了,就会跑异常,也就不会回滚了

  6. 数据库不支持事务

posted @ 2020-05-20 16:45  蒙多~想去哪就去哪  阅读(165)  评论(0编辑  收藏  举报