news 2026/5/24 11:22:25

事务拦截器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/5/22 13:12:06

SQL Server重复记录查询、删除处理

1、查找表中多余的重复记录,重复记录是根据单个字段(aID)来判断 select * from A where aID in (select aID from A group by aID having count(aID) > 1) 例二: select * from testB where numeber in (select number from A group by number having count(…

作者头像 李华
网站建设 2026/5/24 7:20:32

复制字符串而不是直接赋值指针

复制字符串而不是直接赋值指针 (LeetCode:2418.按身高排序) 1.why?数据独立性: 复制字符串使返回结果与输入数据完全独立 修改返回数组中的字符串不会意外影响原始数据(可移植性) 原始数据被释放…

作者头像 李华
网站建设 2026/5/23 23:23:25

Kotaemon:基于Gradio的RAG文档对话工具安装与配置

Kotaemon:基于Gradio的RAG文档对话工具安装与配置 在企业知识管理日益复杂的今天,如何让AI真正“读懂”内部文档,并以自然语言准确作答,成为智能客服、知识助手等场景的核心挑战。传统的问答系统常因信息孤岛或上下文缺失而表现不…

作者头像 李华
网站建设 2026/5/24 0:34:41

基于Android的大学生校园互帮APP的设计与实现(源码+lw+部署文档+讲解等)

课题介绍本课题聚焦大学生校园内需求匹配低效、互助渠道单一的痛点,设计实现基于 Android 的大学生校园互帮 APP。系统以 Java 为核心开发语言,基于 Android 原生框架搭建移动端应用,搭配轻量后端服务架构,处理需求发布、技能匹配…

作者头像 李华
网站建设 2026/5/24 1:55:50

LobeChat:全栈开发现代化AI聊天应用

LobeChat:构建现代 AI 聊天应用的全栈实践 在生成式 AI 浪潮席卷各行各业的今天,一个直观、灵活且可定制的对话界面,已成为连接用户与大模型能力的关键入口。然而,从零开发一套稳定、美观、功能完整的 AI 聊天系统——支持多模型切…

作者头像 李华
网站建设 2026/5/22 7:38:52

LobeChat能否取代官方ChatGPT客户端?对比评测来了

LobeChat能否取代官方ChatGPT客户端?对比评测来了 在企业越来越依赖大模型构建智能系统、开发者渴望更自由AI交互入口的今天,一个开源项目正悄然改变游戏规则——LobeChat。它不再只是“另一个聊天界面”,而是试图成为连接人与多模态AI能力的…

作者头像 李华