欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > DataSource学习

DataSource学习

2025/11/20 4:11:06 来源:https://blog.csdn.net/u012196940/article/details/148569158  浏览:    关键词:DataSource学习

上次被问到DataSource如何实现动态切换租户连接。被问蒙了。

这里补一下相关知识。

1、简要的流程:
Client->>Interceptor: 请求携带Token
Interceptor->>TenantContext: 解析tenantId并存储
Interceptor->>DataSourceRouter: 触发数据源路由
DataSourceRouter->>TenantContext: 获取当前tenantId
DataSourceRouter->>JPA: 返回对应数据源
JPA->>Database: 执行SQL操作

如果要细展开
首先说明一下DataSource负责连接池的管理,把请求路由到实际租户的物理DataSource,以及最终连接的提供。

那就是Spring的
AbstractRoutingDataSource的 determineTargetDataSource
这个方法实现的。
具体实现由子类实现。

开源的比如MyBatis 和 Druid都提供 DynamicDataSource类,只需要配置租户ID与数据源的映射关系就行。
或者可以自己去实现Spring的 AbstractRoutingDataSource类。建立一个map,维护好tenantId和不同租户的pool的关系。

DataSource 技术规范归属。

DataSource 是 javax.sql 的也就是JDK的。rt.jar中。属于JDBC规范接口生态。

Spring的 AbstractRouingDataSource回答了你的问题。这个类的determineTargetDataSource负责根据tenantId返回pool,进而生成connection存到上下文里。
这个步骤是访问数据库或者建立事务时触发。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词