两个方法事务调用问题

方法a调用方法b,两个方法都使用事务,易出错的问题


    @Autowired
    private OrderService orderService;

    @Transactional
    public void methodA() {
        try{
            orderService.methodB();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

@Service
public class OrderService {

    @Transactional
    public void methodB() {
        throw new RuntimeException();
    }
}

报错
在这里插入图片描述

原因

两个方法共用一个事务,事务b抛出异常,事务被标记为只能回滚状态,方法a没办法提交事务了

解决方法

方法b开启新事务,或者不用事务

    public void methodB() {
        throw new RuntimeException();
    }

或者

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void methodB() {
        throw new RuntimeException();
    }

或者

    @Transactional(propagation = Propagation.NESTED)
    public void methodB() {
        throw new RuntimeException();
    }

版权声明:本文为mingwulipo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。