news 2026/10/6 5:39:22

TransactionTemplate、事务管理器和DataSource数据源三者的关系

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TransactionTemplate、事务管理器和DataSource数据源三者的关系

TransactionTemplate、事务管理器和DataSource数据源三者的关系

  • 1. TransactionTemplate - “事务执行模板”
  • 2. PlatformTransactionManager - “事务执行引擎”
  • 3. DataSource - “连接工厂”

  • 事务拦截器、事务管理器和DataSource数据源三者的关系
  • DriverManager、DataSource、数据库驱动以及数据库连接池的关系

TransactionTemplate、事务管理器(PlatformTransactionManager)和数据源(DataSource)三者的关系,可以用一个更直接的比喻来理解:它们构成了一个从“业务指令”到“数据库操作”的清晰流水线。

下图直观地展示了当你使用TransactionTemplate执行一段业务代码时,这三个核心组件是如何协同工作的,特别是它们与关键的线程绑定(ThreadLocal)机制的交互:

// mermaidsequenceDiagram participant TT asTransactionTemplateparticipant TM as 事务管理器<br/>(PlatformTransactionManager)participant DDS as 动态数据源<br/>(DynamicDataSource)participantBizas 你的业务逻辑<br/>(在Callback中)Noteover TT,DDS:阶段一:准备与开启事务 TT->>TM:1.getTransaction()Noteright of TM:根据传播行为等属性<br/>决定开启新事务或加入现有事务 TM->>DDS:2.getConnection()Noteright of DDS:关键路由点:调用determineCurrentLookupKey()<br/>依赖你预先在ThreadLocal中设置好的数据源KeyDDS-->>TM:3.返回对应的物理连接Noteright of TM:4.将连接绑定到当前线程<br/>(TransactionSynchronizationManager)TM-->>TT:5.返回TransactionStatus(事务状态凭证)Noteover TT,DDS:阶段二:在事务中执行业务 TT->>Biz:6.execute(transactionStatus->>{...})Noteright ofBiz:7.你的业务代码执行SQL<br/>(框架会从当前线程获取已绑定的连接)Noteover TT,DDS:阶段三:结束与清理Biz-->>TT:8.返回业务结果 TT->>TM:9.commit(transactionStatus)<br/>或rollback(...)Noteright of TM:10.提交/回滚,并执行关键操作:<br/>-解除连接的线程绑定<br/>-关闭/归还连接 TM-->>TT:完成 TT-->>调用方:返回最终结果


1. TransactionTemplate - “事务执行模板”

  • 它是什么:Spring提供的编程式事务管理核心工具类。它将事务管理的样板代码(如开始、提交、回滚、异常处理)封装起来。
  • 核心方法:execute(TransactionCallback<T> action)。我们只需要把要在事务中执行的业务逻辑,以回调函数(lambda)的形式写进去。
  • 它与事务管理器的关系:TransactionTemplate内部必须持有一个PlatformTransactionManager的引用。它自己不管理事务,所有事务操作(getTransaction,commit,rollback)都委托给这个管理器去执行。

2. PlatformTransactionManager - “事务执行引擎”

  • 角色不变:和声明式事务中一样,它是实际操作事务的组件。DataSourceTransactionManager是其最常见实现。
  • 关键动作:当TransactionTemplate调用其getTransaction()方法时,它执行我们图中描述的关键步骤2-4:获取连接、绑定线程。

3. DataSource - “连接工厂”

  • 角色不变:负责生产Connection对象。在你的项目中,它就是动态数据源(AbstractRoutingDataSource)。
  • 核心时机:它的路由逻辑(determineCurrentLookupKey())正是在步骤2,被事务管理器调用时触发的。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 6:44:18

Qwen3-VL-30B 4bit量化版发布:单卡部署突破

Qwen3-VL-30B 4bit量化版发布&#xff1a;单卡部署突破 在AI能力不断膨胀的今天&#xff0c;一个现实问题越来越刺眼&#xff1a;我们真的需要动辄八卡集群、百万级算力投入&#xff0c;才能跑通一个多模态模型吗&#xff1f; 当“看得懂图、读得懂表、讲得通道理”逐渐成为智…

作者头像 李华
网站建设 2026/10/4 18:35:26

FLUX.1-ControlNet自定义控制模式全解

FLUX.1-ControlNet自定义控制模式全解 在当前文生图模型快速演进的背景下&#xff0c;越来越多开发者和创意工作者不再满足于“提示词采样”这种基础生成范式。他们希望对图像结构、色彩分布、空间层次乃至风格迁移路径实现细粒度干预。然而&#xff0c;主流框架中的 ControlN…

作者头像 李华
网站建设 2026/10/5 22:05:25

Windows server 2019 离线安装docker容器

Windows server 2019 离线安装docker容器 # docker 下载地址 https://download.docker.com/win/static/stable/x86_64/# 解压安装包到指定目录 (示例: D:\Docker) Expand-Archive -Path "docker-28.3.2.zip" -DestinationPath "D:\Docker"# 添加到系统 PAT…

作者头像 李华
网站建设 2026/10/4 15:48:58

springboot基于uniapp的有机农产品商城电商平台_4747f8w7-小程序

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 同行可拿货,招校园代理 Springbootuniapp_747f8w7- 小程序的有机农产品商城…

作者头像 李华
网站建设 2026/10/5 18:19:52

用Dify构建文生视频工作流:从输入到输出

用Dify构建文生视频工作流&#xff1a;从输入到输出 在内容创作日益依赖AI的今天&#xff0c;我们不再满足于“文字生成文字”或“图像生成图像”——真正的突破发生在多模态协同中。想象这样一个场景&#xff1a;你只需输入一句“一只发光水母在深海中缓缓漂浮&#xff0c;周…

作者头像 李华
网站建设 2026/10/5 8:17:36

基于Android的高校教室预约管理平台系统(源码+lw+部署文档+讲解等)

课题介绍 本课题聚焦高校教室预约流程繁琐、资源调度混乱、信息同步不及时的痛点&#xff0c;设计实现基于 Android 的高校教室预约管理平台。系统以 Java 为核心开发语言&#xff0c;基于 Android 原生框架搭建移动端应用&#xff0c;搭配轻量后端服务架构&#xff0c;处理教室…

作者头像 李华