news 2026/10/12 4:46:07

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

作者头像

张小明

前端开发工程师

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

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

  • 1. 事务拦截器 (TransactionInterceptor) - “交通指挥中心”
  • 2. 事务管理器 (PlatformTransactionManager) - “施工现场经理”
  • 3. DataSource数据源 - “资源仓库管理员”

事务拦截器(TransactionInterceptor)、事务管理器(PlatformTransactionManager)和DataSource数据源三者的关系,是Spring声明式事务的铁三角,它们之间协同工作。我们使用【动态数据源】的场景展示数据库操作的核心流程,如下所示:

  • 事物拦截器:事务拦截器TransactionInterceptor
  • 动态数据源:Sharding分库分表复杂SQL之数据源路由


1. 事务拦截器 (TransactionInterceptor) - “交通指挥中心”

  • 职责:它是AOP中的“通知”,负责拦截@Transactional方法调用,是事务处理的总协调者。但它不直接管理事务或连接。
  • 关键动作:
    • 解析属性:确定方法需要的事务传播行为、隔离级别等。
    • 调用管理器:将具体事务工作(获取连接、提交、回滚)委托给事务管理器(PlatformTransactionManager)。
    • 异常转换:将数据库或JDBC异常转换为Spring的统一事务异常。

2. 事务管理器 (PlatformTransactionManager) - “施工现场经理”

  • 职责:它是事务操作的具体执行者,是Spring事务抽象的核心接口。你配置的DataSourceTransactionManager是其最常见实现。
  • 关键动作:
    • 管理生命周期:具体执行getTransaction(),commit(),rollback()。
    • 连接绑定:在事务开启时,它会从DataSource获取连接,并通过TransactionSynchronizationManager.bindResource()将连接绑定到当前线程。这是保证同一个事务中使用同一连接的关键。
    • 同步管理:管理事务同步回调(如afterCommit)。

3. DataSource数据源 - “资源仓库管理员”

  • 职责:纯粹负责提供标准的java.sql.Connection连接对象。
  • 在你的项目中的关键:你配置的动态数据源(AbstractRoutingDataSource)是其高级实现。
    • 它的核心方法是determineCurrentLookupKey()。该方法被调用的时机,正是事务管理器在getTransaction()过程中向其获取连接时。
    • 此时,它必须能从TransactionSynchronizationManager或你自定义的DataSourceContextHolder(本质也是ThreadLocal)中正确获取到之前由切面设置的数据源标识,才能返回正确的物理连接。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 15:22:37

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

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

作者头像 李华
网站建设 2026/10/10 21:00:47

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

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

作者头像 李华
网站建设 2026/10/11 0:36:31

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/12 3:05:44

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

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

作者头像 李华
网站建设 2026/10/11 7:02:55

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

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

作者头像 李华
网站建设 2026/10/10 19:03:16

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

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

作者头像 李华