一、演示Spring的傳播行為(NOT_SUPPORTED)
1.1、StockServiceImplNOT_SUPPORTED?
/**
* @Author : 一葉浮萍?xì)w大海
* @Date: 2023/10/30 15:43
* @Description: 演示NOT_SUPPORTED的傳播行為
* 外部不存在事務(wù):不開啟新的事務(wù)
* 外部存在事務(wù):不用外部的事務(wù)
*/
@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
* 場景一:外部不存在事務(wù)(注釋掉reduceStock的@Transactional注解),內(nèi)部存在事務(wù)(傳播屬性為NOT_SUPPORTED)
* 預(yù)期結(jié)果:外部普通方法 & 內(nèi)部事務(wù)方法都正常提交
* 實(shí)際結(jié)果:外部普通方法 & 內(nèi)部事務(wù)方法都正常提交
* 對(duì)應(yīng)方法:m1()
*
* 場景二:外部存在事務(wù)(REQUIRED),內(nèi)部存在事務(wù)(MANDATORY)
* 預(yù)期結(jié)果:外部事務(wù)方法回滾 & 內(nèi)部事務(wù)方法正常提交
* 實(shí)際結(jié)果:外部事務(wù)方法回滾 & 內(nèi)部事務(wù)方法正常提交
* 對(duì)應(yīng)方法: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()執(zhí)行了");
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 : 一葉浮萍?xì)w大海
* @Date: 2023/10/30 15:43
* @Description: 演示NOT_SUPPORTED的傳播行為
* 外部不存在事務(wù):不開啟新的事務(wù)
* 外部存在事務(wù):不用外部的事務(wù)
*/
@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()執(zhí)行了");
integralMapper.insert(updateIntegral);
int i = 10 / 0;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-734905.html
文章來源:http://www.zghlxwxcb.cn/news/detail-734905.html
到了這里,關(guān)于系列四十七、Spring的事務(wù)傳播行為案例演示(七)#NOT_SUPPORTED的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!