实践理解 Transactional 是否生效

实践理解 Transactional 是否生效

示例:

新建一个订单表 tb_order_test 。

手动插入一条数据。

然后在代码中,根据 id 更新,如果更新成功,那么 update_time 会变化。

代码中执行 1/0; 由于 0不能做为除数,代码会抛异常。

通过 updateTime 观察事务是否提交/回滚。@Transactional 是否生效。

@Service
public class TransactionalDemo {@Resourceprivate OrderService orderService;//    @Transactional(rollbackFor = Exception.class)public void doA() {doB();//0不能做为除数,此处会抛异常int value = 1/0;}@Transactional(rollbackFor = Exception.class)public void doB() {Order order = new Order();order.setId(123L);order.setUpdateTime(new Date());//根据 id 更新,如果更新成功,那么 updateTime 会变化。orderService.updateById(order);}}

A方法调用B方法,A没有@Transactional 注解,B有

执行A方法,抛异常后,update_time 已更新为最新时间,更新成功,说明事务没有回滚。@Transactional 不生效

@Transactional 底层是通过 AOP 动态代理实现的,如果在同一个类中调用,就不是通过代理类调用了,事务不会生效。

解决方法: 通过@Resource 注入自身服务再调用方法。比如类叫 XxService ,那么可以在 XxService 里面用 @Resource 注入 XxService 。

A方法调用B方法,A有@Transactional 注解,B也有

执行A方法,抛异常后,update_time 没有更新成功,说明事务回滚了。@Transactional 生效

A方法调用B方法,A有@Transactional 注解,B没有

执行A方法,抛异常后,update_time 没有更新成功,说明事务回滚了。@Transactional 生效

A方法调用B方法,A有@Transactional 注解,B没有。A方法 catch 异常

如果在 Service 服务层 catch异常,那么 @Transactional 会认为方法正常执行,没有异常,不会回滚。

@Transactional 不生效。

如果确认需要对 @Transactional 注解 的方法进行 catch,需要放到 Controller 层catch 异常。

参考资料:

https://blog.csdn.net/java_zyq/article/details/107656653

https://www.cnblogs.com/ibcdwx/p/16643034.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/661412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 可重复读隔离级别,完全解决幻读了吗?

文章目录 前言一、什么是幻读?二、快照读是如何避免幻读的?三、当前读是如何避免幻读的?四、幻读被完全解决了吗?场景1场景2 总结 前言 MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」,但是它很大程度上避免幻读…

第 10 章:在C++中使用协程进行系统编程

最后一章专门介绍了一项对系统编程非常有用的功能,但这在C标准中相对较新。协程对象迅速找到了应用,成为了一等公民的状态机对象。它们的强大之处在于隐藏了协程帧后面的逻辑。请注意,这是一个高级主题,且C的协程接口既不简单也不…

交叉注意力融合2024创新方案汇总,附配套模块和代码

多模态学习和注意力机制是当前深度学习研究的热点领域之一,而交叉注意力融合作为这两个领域的结合点,具有很大的发展空间和创新机会。 作为多模态融合的一个重要组成部分,交叉注意力融合通过注意力机制在不同模块之间建立联系,促…

【C语言】main函数的参数形式

一、思考 在C语言中int main(),是最初接触该语言使用的形式。后面学习到函数部分,意识到int main()就是int main(void),意为main函数没有参数。再到后面却又有int main(int argc, char *argv[])这种参数形式。 不禁疑问,main函数的…

校招春招,在线测评一般测试哪些内容?

在校园招聘这一块,很多应届毕业生会相当在乎,对于他们来说,如果在学校期间就找到工作是比较轻松的事情,不用担心毕业之后找工作困难重重,可以稳稳当当毕业。但想要迅速通过招聘也不容易,在校招春招上面&…

深度学习电脑配置有什么要求?

随着人工智能和机器学习的快速发展,深度学习已经成为了许多领域的重要工具。然而,深度学习的应用需要强大的计算能力,因此对于想要进行深度学习的用户来说,选择一台合适的电脑是必不可少的。本文将重点介绍深度学习电脑配置的要求…

2023年OceanBase开发者大会:核心内容与学习收获(附大会核心PPT下载)

本次大会邀请了众多业界领袖、技术大咖和开发者,共同探讨数据库领域的技术发展趋势和未来机会,与开发者共同探讨单机分布式、云原生、HTAP 等数据库前沿趋势,分享全新的产品 roadmap,交流场景探索和最佳实践。 一、大会核心内容 …

在服务器上下载google云端硬盘文件

遇到问题 下载谷歌硬盘(drive.google.com开头)的用wget不行,用wget说无法解析地址。 解决方法 1. 安装gdown pip install gdown2. 保存硬盘地址到我的谷歌网盘里,用如下右键复制的方式。 3.修改权限 右键共享处,…

Message Queue --- RabbitMQ

MessageQueue Intro 什么是MQ为什么使用MQ常见的MQ 什么是MQ MQ全称是Message Queue,消息的队列,因为是队列,所以遵循FIFO 先进先出的原则,它是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,M…

Camera | 15.闪光灯SGM3141概述

芯片说明 SGM3141是一种电流调节降压/升压电荷泵LED驱动器,能够驱动700M输出电流。它非常适合为相机闪光灯应用的高亮度LED供电。SGM3141具有1/2操作模式,用于控制闪光和火炬模式的输出电流。 电源电压在2.7V到5.5V之间工作,非常适合由1芯锂…

第三百零一回

文章目录 1. 概念介绍2. 实现方法2.1 obscureText属性2.2 decoration属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现倒计时功能"相关的内容,本章回中将介绍如何实现密码输入框.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍…

Redis的哨兵模式

Redis的哨兵模式 1、什么是哨兵模式? 能够自动监控master是否发生故障,如果故障了会根据投票数从slave中挑选一个作为master,其他的slave会自动转向同步新的master,实现故障自动转义。 2、原理 sentinel会按照指定的频率给mas…

代码随想录算法训练营第二十三天|669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树。

669. 修剪二叉搜索树 题目链接:修剪二叉搜索树 题目描述: 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对…

yolov5导出onnx模型问题

为了适配C工程代码,我在导出onnx模型时,会把models/yolo.py里面的forward函数改成下面这样, #转模型def forward(self, x):z [] # inference outputfor i in range(self.nl):x[i] self.m[i](x[i]) # convbs, _, ny, nx x[i].shape # x(…

超级详细——手撕贪吃蛇小游戏!

目录 前言 1. Win32 API介绍 1.1 Win32 API 1.2 控制台程序 1.3 控制台屏幕上的坐标COORD 1.4 GetStdHandle 1.5 GetConsoleCursorInfo 1.6 CONSOLE_CURSOR_INFO 1.7 SetConsoleCursorInfo 1.8 SetConsoleCursorPosition 1.8 GetAsyncKeyState 2.贪吃蛇游戏设计 2.…

物联网浏览器(IoTBrowser)-Modbus协议集成和测试

Modbus协议在应用中一般用来与PLC或者其他硬件设备通讯,Modbus集成到IoTBrowser使用串口插件模式开发,不同的是采用命令函数,具体可以参考前面几篇文章。目前示例实现了Modbus-Rtu和Modbus-Tcp两种,通过js可以与Modbus进行通讯控制…

代码随想录算法训练营第三十六天| 435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路:按左边界进行由小到大排序,然后前一个的右边界和后一个的左边界相比,看是否相交,如果相交,…

【EI会议征稿中|ACM出版】#先投稿,先送审#第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024)​

#先投稿,先送审#ACM出版#第三届网络安全、人工智能与数字经济国际学术会议(CSAIDE 2024) 2024 3rd International Conference on Cyber Security, Artificial Intelligence and Digital Economy 2024年3月8日-10日 | 中国济南 会议官网&…

oracle数据库慢查询SQL

目录 场景: 环境: 慢SQL查询一: 问题一:办件列表查询慢 分析: 解决方法: 问题二:系统性卡顿 分析: 解决方法: 慢SQL查询二 扩展: 场景: 线…

CXO清单:低代码平台必备的16个基本功能:从需求到实现的全面指南

对于 CIO、CTO 和 CDO(在此统称为 CXO)来说,认识到快速变化的技术和竞争格局以及他们在组织中的角色变化至关重要。处理持续不断的软件开发请求、考虑不断变化的业务流程、提高客户和法规的透明度、提高企业数据安全性以及在短时间内扩展基础…