当前位置: 首页 > news >正文

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

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

1.1、StockServiceImplMANDATORY 

/*** @Author : 一叶浮萍归大海* @Date: 2023/10/30 15:43* @Description: 演示MANDAORY的传播行为*      外部不存在事务:抛出异常 No existing transaction found for transaction marked with propagation 'mandatory'*      外部存在事务:融合到外部的事务*      要求外部方法必须有事务*/
@Service(value = "stockServiceImplMANDATORY")
public class StockServiceImplMANDATORY extends ServiceImpl<StockMapper, StockDO> implements StockService {@Resourceprivate StockMapper stockMapper;@Resourceprivate IntegralService integralServiceImplMANDATORY;/*** MANDAORY的传播行为* @param id* @param num* 场景一:外部不存在事务(注释掉reduceStock的@Transactional注解),内部存在事务(传播属性为MANDATORY)*      预期结果:抛异常*      实际结果:外部普通方法正常执行,内部事务方法回滚*      对应方法:m1()** 场景二:外部存在事务(REQUIRED),内部存在事务(MANDATORY)*      预期结果:外部事务 & 内部事务都回滚*      实际结果:外部事务 & 内部事务都回滚*      对应方法:m1()* ...*/@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)@Overridepublic void reduceStock(Long id, Integer num) {m1(id, num);}private void m1(Long id, Integer num) {System.out.println("==============>StockServiceImplMANDATORY的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);integralServiceImplMANDATORY.addIntegral(updateIntegral);int i = 10 / 0;} catch (Exception e) {throw new RuntimeException(e);}}}

1.2、IntegralServiceImplMANDATORY 

/*** @Author : 一叶浮萍归大海* @Date: 2023/10/30 15:43* @Description: 演示NESTED的传播行为*      外部不存在事务:*      外部存在事务:*/
@Service(value = "integralServiceImplMANDATORY")
public class IntegralServiceImplMANDATORY extends ServiceImpl<IntegralMapper, IntegralDO> implements IntegralService {@Resourceprivate IntegralMapper integralMapper;@Transactional(propagation = Propagation.MANDATORY,rollbackFor = Exception.class)@Overridepublic void addIntegral(IntegralDO updateIntegral) {m1(updateIntegral);}private void m1(IntegralDO updateIntegral) {try {System.out.println("==============>IntegralServiceImplMANDATORY的m1()执行了");integralMapper.insert(updateIntegral);int i = 10 / 0;} catch (Exception e) {throw new RuntimeException(e);}}}

http://www.lryc.cn/news/214350.html

相关文章:

  • idea插件(二)-- String Manipulation(字符串处理工具)
  • HQChart实战教程67-worker批量计算股票指标
  • 博客系统自动化测试项目实践
  • 软考高级之系统架构师系列之操作系统基础
  • 制作一个可以arm架构下运行的docker镜像(for Python)
  • Goland连接服务器/虚拟机远程编译开发
  • 大数据Doris(十四):Doris表中的数据基本概念
  • 【Linux】Linux环境配置以及部署项目后端
  • RabbitMQ消费者的可靠性
  • 云计算助力史上首届“云上亚运”圆满成功!
  • 博彦科技:以金融为起点,凭借创新技术平台真打实干
  • NLP实践——中文指代消解方案
  • 【Redis】认识Redis-特点特性应用场景对比MySQL重要文件及作用
  • goland setup go env
  • 如何打造一支敏捷测试团队
  • STM32F40EZT6 PWM可控制电压原理
  • 信号灯集,消息队列
  • 我在Vscode学OpenCV 初步接触
  • [threejs]让导入的gltf模型显示边框
  • YOLOv5优化:独家创新(SC_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列
  • 作物模型--土壤数据制备过程
  • 学习笔记|单样本t检验|无统计学意义|规范表达|《小白爱上SPSS》课程:SPSS第四讲 | 单样本T检验怎么做?很单纯很简单!
  • Bug管理规范
  • 剑指JUC原理-8.Java内存模型
  • Azure 机器学习 - 使用 AutoML 和 Python 训练物体检测模型
  • 【深度学习】pytorch——快速入门
  • git本地项目同时推送提交到github和gitee同步
  • 结构体数据类型使用的一些注意点
  • Serverless化云产品超40款 阿里云发布全球首款容器计算服务
  • 最小化安装移动云大云操作系统--BCLinux-R8-U2-Server-x86_64-231017版