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

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存到上下文里。
这个步骤是访问数据库或者建立事务时触发。

相关文章:

  • k8s使用自建nfs做持久化无法控制磁盘使用大小问题处理
  • 游戏测试面试八股汇总(持续更新版)
  • 借助AI识别测试盲区:从需求文档中挖掘遗漏场景
  • 《高等数学》(同济大学·第7版)第四章第二节换元积分法
  • axios取消请求
  • iOS 抖音首页头部滑动标签的实现
  • iOS和桌面双端抓包实战经验总结:Sniffmaster与常见工具组合解析
  • 为什么选择物理服务器租用?
  • iOS超级签申请流程及环境部署
  • 基于OpenCV的风格迁移:图像金字塔方法
  • 安全生产管理是什么?安全生产管理系统都有哪些核心功能?
  • 傲软录屏:轻松录制,高效分享
  • 【时时三省】(C语言基础)静态局部变量(static局部变量)
  • Ubuntu中安装CURL
  • SQL进阶之旅 Day 24:复杂业务场景SQL解决方案
  • ubuntu24安装cuda12.6+cudnn9.6
  • 谈谈ConcurrentHashMap相比于Hashtable的优势
  • 论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(三)
  • React 19 新特性
  • Oracle实用参考(13)——Oracle for Linux ASM+RAC环境搭建(1)
  • 青岛低价网站建设/网站关键词优化排名
  • 广州网站建设方案/重庆森林电影简介
  • 美国惠尔润滑油官方网站/网络营销的未来发展趋势
  • 网站开发进入腾信职位/如何做电商赚钱
  • 宇说建筑网站/seo应该怎么做
  • 怎么合作做网站/百度互联网营销顾问