当前位置: 首页 > 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);}}}

相关文章:

  • 驱动第十天
  • libpcap获取数据包
  • 前度开发面试题
  • 【网络协议】聊聊http协议
  • linux中断下文工作队列之延迟工作(中断六)
  • 第三届字节跳动奖学金官宣开奖,13位优秀科研学子每人获10万奖学金
  • 「永不失联」产品创新与升级系列发布,预约直播“即将发车”
  • 结构体内存分配
  • 基于STC系列单片机实现定时器0扫描数码管显示定时器/计数器1作为计数器1产生频率的功能
  • mysql存在10亿条数据,如何高效随机返回N条纪录,sql如何写
  • Android使用Glide类加载服务器中的图片
  • 2023 年 Github 万圣节彩蛋
  • matlabR2021a正版免费使用
  • ardupilot开发 --- 深度相机 篇
  • 高校教务系统登录页面JS分析——西安电子科技大学
  • Angularjs之国际化
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • QQ浏览器x5内核的兼容性问题
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Vue 重置组件到初始状态
  • 阿里研究院入选中国企业智库系统影响力榜
  • 不上全站https的网站你们就等着被恶心死吧
  • 动态魔术使用DBMS_SQL
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 前端_面试
  • 前端临床手札——文件上传
  • 全栈开发——Linux
  • 设计模式走一遍---观察者模式
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 王永庆:技术创新改变教育未来
  • 小程序开发之路(一)
  • gunicorn工作原理
  • 组复制官方翻译九、Group Replication Technical Details
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二十四)Flask之flask-session组件
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (全注解开发)学习Spring-MVC的第三天
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (四)库存超卖案例实战——优化redis分布式锁
  • (五)MySQL的备份及恢复
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)程序员疫苗:代码注入
  • .bat批处理(一):@echo off
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net MVC中使用angularJs刷新页面数据列表
  • .pop ----remove 删除
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限