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

http://www.dtcms.com/a/242004.html

相关文章:

  • 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)
  • carla与ros坐标变换
  • 基于强化学习的智能调度系统:从理论到实践
  • 简单介绍Genetic Algorithms(遗传算法,简称 GA)
  • 【群体结构ADMIXTURE之二】监督分群
  • 【计网】作业7
  • Dify 知识库深度剖析:从构建到高效应用
  • Linux内核学习小记-1
  • 【Linux网络编程】网络通信初步认识 重要套接字接口
  • 联邦学习聚合参数操作详解
  • 【K8S】k8s中node和pod的区别