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

@Transactional 详解

基于@Transactional注解
@Transactional实质是使用了JDBC的事务来进行事务控制的
@Transactional基于Spring的动态代理的机制
@Transactional实现原理
1)事务开始时,通过AOP机制,生成一个代理connection对象,并将其放入DataSource实例的某个与DataSourceTransactionManager相关的某处容器中。在接下来的整个事务中,客户代码都应该使用该connection连接数据库,执行所有数据库命令[不使用该connection连接数据库执行的数据库命令,在本事务回滚的时候得不到回滚](物理连接connection逻辑上新建一个会话session;DataSource与TransactionManager配置相同的数据源)
2)事务结束时,回滚在第1步骤中得到的代理connection对象上执行的数据库命令,然后关闭该代理connection对象(事务结束后,回滚操作不会对已执行完毕的SQL操作命令起作用)

声明式事务的管理实现本质:
事务的两种开启方式
显示开启start transaction | begin,通过 commit | rollback 结束事务
关闭数据库中自动提交 autocommit set autocommit = 0;MySQL 默认开启自动提交;通过手动提交或执行回滚操作来结束事务
Spring 关闭数据库中自动提交:在方法执行前关闭自动提交,方法执行完毕后再开启自动提交

// org.springframework.jdbc.datasource.DataSourceTransactionManager.java 源码实现
// switch to manual commit if

相关文章:

  • 双云及多云融合(混合云)
  • 【Ambari】Ansible自动化部署大数据集群
  • Spring6-单元测试:JUnit
  • 最简洁的Portainer环境配置
  • 雨污管网开挖深度的计算
  • NLP在搜索召回领域中的应用场景
  • 7. TypeScript中的Any, Unknown, Void, Never类型
  • vue3 开发中遇到的问题
  • chain.doFilter(request,respnse)
  • 【数据结构与算法】:快速排序和归并排序的非递归实现
  • 微软卡内基梅隆大学:无外部干预,GPT4等大语言模型难以自主探索
  • 设计模式|状态机模式(State Machine Pattern)
  • C++的stack和queue类(一):适配器模式、双端队列与优先级队列
  • ARM、X86、RISC-V三分天下
  • Android 14.0 SystemUI修改状态栏电池图标样式为横屏显示
  • 2017 年终总结 —— 在路上
  • Flex布局到底解决了什么问题
  • iOS编译提示和导航提示
  • Java Agent 学习笔记
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JS笔记四:作用域、变量(函数)提升
  • k8s 面向应用开发者的基础命令
  • MySQL-事务管理(基础)
  • Phpstorm怎样批量删除空行?
  • vue-cli在webpack的配置文件探究
  • 从tcpdump抓包看TCP/IP协议
  • 警报:线上事故之CountDownLatch的威力
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 判断客户端类型,Android,iOS,PC
  • 前端之Sass/Scss实战笔记
  • 数组的操作
  • AI算硅基生命吗,为什么?
  • 阿里云ACE认证学习知识点梳理
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #Linux(权限管理)
  • $$$$GB2312-80区位编码表$$$$
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (十五)使用Nexus创建Maven私服
  • (四) 虚拟摄像头vivi体验
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)socket Aio demo
  • ... 是什么 ?... 有什么用处?
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ C++ ] STL_list 使用及其模拟实现
  • [20171102]视图v$session中process字段含义
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [android] 练习PopupWindow实现对话框
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [C++]C++基础知识概述
  • [codevs 1288] 埃及分数 [IDdfs 迭代加深搜索 ]