Spring 事务不起作用的场景

在使用 Spring 框架进行项目开发的时候,往往会遇到事务不生效的问题,这里总结下常见的几种情况,避免以后入坑:

1.如果使用的是 Spring 代理模式的事务,只能用于 public 的方法上,否则事务不会生效。

2.如果在 Service 内部的 A 调用 B,如果 A、B 方法都没有添加事务注解,事务是不生效的。

@Service
public class OrderServiceImpl implements OrderService {

	@Transactional
    public void update(Order order) {
        updateOrder(order);
    }

    
    public void updateOrder(Order order) {
        // update order
    }

}

3.方法使用 try catch 但是在 catch 中没有抛出异常。

@Service
public class OrderServiceImpl implements OrderService {

    @Transactional
    public void updateOrder(Order order) {
        try {
            // update order
        } catch {

        }
    }

}

4.抛出的异常类型错误,如果不指定 rollbackFor 的异常类型,默认回滚 RuntimeException。

@Service
public class OrderServiceImpl implements OrderService {

    @Transactional
    public void updateOrder(Order order) {
        try {
            // update order
        } catch {
            throw new Exception("error");
        }
    }

}
posted @ 2021-03-01 16:39  LiuChengloong  阅读(280)  评论(0编辑  收藏  举报