当前位置: 首页 > 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.xdnf.cn/news/967393.html

相关文章:

  • 【时时三省】(C语言基础)静态局部变量(static局部变量)
  • Visual Studio2022配置OpenCV环境
  • 自定义表单组件面板排序处理
  • 页面渲染流程与性能优化
  • 如何删除导出的xml中的xmlns:xsd=
  • XML Group端口详解
  • RSA算法
  • 第4章 对象与类
  • 基于51单片机的热敏电阻测温及温度调控系统
  • SpringBoot项目使用Redis作为数据缓存
  • 业务:资产管理功能
  • 亚远景-ASPICE评估标准解析:汽车软件开发的过程能力模型
  • 【Java多线程从青铜到王者】懒汉模式的优化(九)
  • WebLogic简介
  • 第6章 方法 笔记
  • DevSecOps实践:CI/CD流水线集成SAST工具的完整指南
  • 【LeetCode】二叉树相关算法题
  • 笔记 软件工程复习
  • Vue.js教学第二十二章:vue实战项目商城项目
  • el-upload组件,上传文件失败,:on-error方法失效
  • 人工智能与大数据融合发展:新一代智能系统的演进路径
  • 计算机行业光辉开始暗淡
  • Unity3D中Gfx.WaitForPresent优化方案
  • 性能监控的核心要点
  • RestClient
  • AI书签管理工具开发全记录(二十):打包(完结篇)
  • 零基础学前端-传统前端开发(第一期-开发软件介绍与本系列目标)(VScode安装教程)
  • 群晖Nas - Docker(ContainerManager)上安装GitLab
  • Linux内核 -- INIT_WORK 使用与注意事项
  • Windows 文件路径与文件名限制