一、演示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<StockMapper, StockDO> 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<IntegralMapper, IntegralDO> 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);
}
}
}
文章来源地址https://www.toymoban.com/news/detail-734905.html
文章来源:https://www.toymoban.com/news/detail-734905.html
到了这里,关于系列四十七、Spring的事务传播行为案例演示(七)#NOT_SUPPORTED的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!