spring事务失效的几个原因(同类调用,被调用方法事务注解失效)

1.数据库引擎不支持事务
    MySql的MyISAM引擎不支持事务,导致事务注解失效。

2.没有被Spring管理

    // @Service
    public class OrderServiceImpl implements OrderService {   
        @Transactional    
        public void updateOrder(Order order) {     
            // update order;
        }
    }

3.方法不是public的
    @Transactional只能用于public的方法上,否则事务注解不会生效。

4.同一个类中A调用B,B事务注解失效
    因为它们发生了自身调用,就调该类自己的方法,而没有经过 Spring 的代理类,默认只有在外部调用事务才会生效,这也是老生常谈的经典问题了。
    在同一个class中,方法B调用方法A,调用的是原对象的方法,而不通过代理对象。所以Spring无法切到这次调用,也就无法通过注解保证事务性了。
    同样的问题还发生在@Async中

5.异常类型错误或格式配置错误
    只有配置为@Transactional(rollbackFor = Exception.class)才能使所有异常情况事务生效。
    

    

你可能感兴趣的:(spring,spring,java,后端)