系列四十七、Spring的事务传播行为案例演示(七)#NOT_SUPPORTED

一、演示Spring的传播行为(NOT_SUPPORTED)

1.1、StockServiceImplNOT_SUPPORTED 

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/10/30 15:43
 * @Description: 演示NOT_SUPPORTED的传播行为
 *      外部不存在事务:不开启新的事务
 *      外部存在事务:不用外部的事务
 */
@Service(value = "stockServiceImplNOTSUPPORTED")
public class StockServiceImplNOT_SUPPORTED extends ServiceImpl implements StockService {

    @Resource
    private StockMapper stockMapper;

    @Resource
    private IntegralService integralServiceImplNOTSUPPORTED;

    /**
     * SUPPORTS的传播行为
     * @param id
     * @param num
     * 场景一:外部不存在事务(注释掉reduceStock的@Transactional注解),内部存在事务(传播属性为NOT_SUPPORTED)
     *      预期结果:外部普通方法 & 内部事务方法都正常提交
     *      实际结果:外部普通方法 & 内部事务方法都正常提交
     *      对应方法:m1()
     *
     * 场景二:外部存在事务(REQUIRED),内部存在事务(MANDATORY)
     *      预期结果:外部事务方法回滚 & 内部事务方法正常提交
     *      实际结果:外部事务方法回滚 & 内部事务方法正常提交
     *      对应方法:m1()
     * ...
     */
    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
    @Override
    public void reduceStock(Long id, Integer num) {
        m1(id, num);
    }

    private void m1(Long id, Integer num) {
        System.out.println("==============>StockServiceImplNOT_SUPPORTED的m1()执行了");
        try {
            // 减库存
            StockDO dbStock = stockMapper.selectById(id);
            StockDO updateStock = new StockDO();
            BeanUtils.copyProperties(dbStock, updateStock);
            updateStock.setNum(dbStock.getNum() - num);
            stockMapper.updateById(updateStock);

            // 增加积分
            IntegralDO updateIntegral = new IntegralDO();
            updateIntegral.setPreIntegral(0);
            updateIntegral.setCurrentIntegral(1000);
            updateIntegral.setUserId(1L);
            integralServiceImplNOTSUPPORTED.addIntegral(updateIntegral);

            int i = 10 / 0;

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }


}

1.2、IntegralServiceImplNOT_SUPPORTED 

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/10/30 15:43
 * @Description: 演示NOT_SUPPORTED的传播行为
 *      外部不存在事务:不开启新的事务
 *      外部存在事务:不用外部的事务
 */
@Service(value = "integralServiceImplNOTSUPPORTED")
public class IntegralServiceImplNOT_SUPPORTED extends ServiceImpl implements IntegralService {

    @Resource
    private IntegralMapper integralMapper;

    @Transactional(propagation = Propagation.NOT_SUPPORTED,rollbackFor = Exception.class)
    @Override
    public void addIntegral(IntegralDO updateIntegral) {
        m1(updateIntegral);
    }

    private void m1(IntegralDO updateIntegral) {
        try {
            System.out.println("==============>IntegralServiceImplNOT_SUPPORTED的m1()执行了");
            integralMapper.insert(updateIntegral);
            int i = 10 / 0;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

你可能感兴趣的:(Spring全家桶面试系列,spring,java,后端)