今天有个业务逻辑流程为:

1.访客预约确认先更新预约状态为“预约确认”

2.调用http接口发短信、更新预约状态为“预约成功”等一系列操作

这里面有个问题,如果第2步调接口异常或返回失败。则第1步需要回滚。开始我的代码如下:

 public void updateStatusConfirm(int id) throws Exception {appointmentMapper.updateStatusConfirm(id);String res = Httper.get(appConfirmUrlPre + URL_SUFFIX + id);log.info("预约确认接口返回值为:" + res);if (StringUtils.isBlank(res) || !"0".equals(JSON.parseObject(res).getString("resultCode"))) {throw new Exception("预约确认接口返回失败,请稍后重试!");}}

结果发现第1步执行成功,而第2步返回失败,事务并没有回滚。

后来才发现,捕获了异常不会发生事务回滚,除非抛出RuntimeException异常,更改代码如下:

 public void updateStatusConfirm(int id) throws Exception {appointmentMapper.updateStatusConfirm(id);String res = Httper.get(appConfirmUrlPre + URL_SUFFIX + id);log.info("预约确认接口返回值为:" + res);if (StringUtils.isBlank(res) || !"0".equals(JSON.parseObject(res).getString("resultCode"))) {throw new RuntimeException("预约确认接口返回失败,请稍后重试!");}}

就可以了。

这也意味着在service层最好不要捕获异常,否则不会回滚。

Spring事务抛出Exception异常不回滚相关推荐

  1. Spring事务异常回滚,捕获异常不抛出就不会回滚

    Spring事务异常回滚,捕获异常不抛出就不会回滚 参考文章: (1)Spring事务异常回滚,捕获异常不抛出就不会回滚 (2)https://www.cnblogs.com/chen-lhx/p/6 ...

  2. Spring 事务 状态信息的创建、回滚、清理、提交

    为什么80%的码农都做不了架构师?>>>    Spring 的事务是依据AOP来实现的,通过AOP从切面来抓捕异常判断是否回滚以及如何回滚,若是正常的返回则是清理事务信息,实施事务 ...

  3. controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常

    controller的异常处理以及service层的事务控制 最近写代码涉及到一些事务,上午终于把代码给理顺了,之前不太清楚在哪里做异常处理,导致代码遍地try-catch,相当难看. 还是基于con ...

  4. Spring事务管理只对出现运行期异常进行回滚

    使用spring难免要用到spring的事务管理,要用事务管理又会很自然的选择声明式的事务管理,在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检 ...

  5. Spring捕获AOP抛出的异常

    Spring捕获AOP抛出的异常 背景 解决过程 最初方案 失败探索 添加AOP 继承SDK的AOP类 修改AOP生效条件 最终解决方案--BeanPostProcessor 总结 背景 在最近开发中 ...

  6. java exception e抛异常_抛出的异常在上层catch到,但是e.getMessage()为NULL,为什么会这样?...

    1.在一个代码里catch到Exception,throw new Exception(e.getMessage()); 在上级代码里catch到抛出的Exception,想得到错误的信息,结果发现e ...

  7. 错误记录一:线程通信时抛出Exception in thread “Thread-0” java.lang.IllegalMonitorStateException异常

    错误记录一:线程通信时抛出Exception in thread "Thread-0" java.lang.IllegalMonitorStateException异常 完整异常: ...

  8. java 回滚异常_Spring事务管理只对出现运行期异常进行回滚

    Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚. 如果一个方法抛出Exception或者Checked异常,Spring事务管理默 ...

  9. 【Log历练手册】Spring事务管理不能提交异常

    Bug记录 使用@Transactional之后,事务不能提交,费了一番功夫发现是@Transactional(value="")这条信息配错,事务管理器没有正常启用 xml配置文 ...

最新文章

  1. 【转载】JUnit各个注解的含义
  2. 201771010126.王燕《面向对象程序设计(Java)》第六周学习总结
  3. 编程中经常碰到且觉得难的事是什么?
  4. 收购创业公司如何评估价值
  5. C#编程语言之常见的异常类型
  6. python网页爬虫例子_Python 利用Python编写简单网络爬虫实例3
  7. 【视频课】Pytorch模型分析进阶(可视化,参数量与计算量,计算速度)
  8. Matlab | Matlab从入门到放弃(8)——线性代数
  9. h5页 点击返回时关闭_在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口...
  10. arcgis xml 下载 切片_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...
  11. node将图片转换成html文件,node+puppeteer将整个网页html转换为图片并保存【滚动截屏】...
  12. 再求f(x,n)(信息学奥赛一本通-T1167)
  13. 人工智能切入垂直领域 风口已至?
  14. python爬取网页实时数据_使用 Python 爬取网页数据
  15. Cisco dynamips模拟器安装指南
  16. 黎曼猜想用计算机验证,黎曼猜想的一个“有趣”证明,当今数学界最重要的数学难题之一...
  17. 计算机毕业设计、课程设计之[含论文+源码等]S2SH+mysql的报刊订阅系统[包运行成功]
  18. 用java给pdf压缩并加密_Java实现多文件压缩加密并重命名压缩文件对象的方法
  19. 精准关键词获取-行业搜索词分析
  20. HI3861学习笔记(14)——ADC接口使用

热门文章

  1. 超详细!图论最短路算法与极简c++代码(配题目)
  2. linux软路由关闭超线程,结论 - Linux 软路由性能测试及分析[图文]_Linux教程_Linux公社-Linux系统门户网站...
  3. 视频教程-区块链技术原理精讲-区块链
  4. 总结教训:stm32f4-Discovery驱动三星s6d1121液晶程序
  5. 【VSPD虚拟串口】【Modbus Poll】【Modbus Slave】仿真工具的学习过程
  6. 官方:最好的版本!Python 3.11正式版来了!
  7. OpenStack基础知识及搭建云平台先电的基本虚拟机配置
  8. 小米max2装鸿蒙,小米max2全新玩法,连接电视大屏玩游戏看电影!
  9. 图像处理的仿射变换与透视变换
  10. 解决0X80042412错误,恢复已备份的Widows 8.1系统镜像到另一个固态硬盘。