【Spring】【Mybatis】【Dynamic-Datasource】【事务】Spring + MyBaits + 事务 + 动态数据源 四者是如何协调的呢?(从一个数据库连接串一串四者的联系)

1  前言

我上次有一篇是讲了从一个数据库连接的角度分析了 Spring + MyBaits + 事务三者的联系https://www.cnblogs.com/kukuxjx/p/17861966.html,这是在数据源固定的情况下。那么可能会遇到,比如按租户的分库,这种情况下我们会引入动态的数据源比如 苞米豆团队的 Dynamic-Datasource 或者是自己公司内部封装的工具、框架等,这节我们就以 Dynamic-Datasource 为例,来看看动态数据源的情况下,我们的事务、Mybatis 又是如何关联到一起的。

2  固定数据源下的关系

在看之前,我们先看看固定数据源下的,连接获取的一个过程:

当然所经过的类,肯定不止上边这么几个哈,我只简要的画了几个重要的类在图上,可以看到最后 mybatis 执行的时候,连接的获取,先从上下文中获取连接,如果有的话就用当前上下文中的,没有的话就从数据源中获取一个连接进行执行。

3  动态数据源下的关系

在串联动态数据源下时,我们得先看看 Dynamic-Datasource 都主要做了哪些内容。我这里引入的 3.0.0 版本的哈。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

配置了两个数据源:

复制代码
# 默认数据源
spring.datasource.dynamic.primary = master
# master 数据源
spring.datasource.dynamic.datasource.master.type = com.zaxxer.hikari.HikariDataSource
spring.datasource.dynamic.datasource.master.url = jdbc:postgresql://localhost:5432/test
spring.datasource.dynamic.datasource.master.username = postgres
spring.datasource.dynamic.datasource.master.password = xxx
spring.datasource.dynamic.datasource.master.driver-class-name = org.postgresql.Driver

spring.datasource.dynamic.datasource.test01.type = com.zaxxer.hikari.HikariDataSource
spring.datasource.dynamic.datasource.test01.url = jdbc:postgresql://localhost:5432/shiyanjidi
spring.datasource.dynamic.datasource.test01.username = postgres
spring.datasource.dynamic.datasource.test01.password = xxx
spring.datasource.dynamic.datasource.test01.driver-class-name = org.postgresql.Driver
复制代码

我们看看 starter 的自动装配类:

其中引入了一个重要的数据源:DynamicRoutingDataSource:

看一看它的类图关系:

再看我们上边的图里,从数据源中获取连接,而这里的 DynamicRoutingDataSource 获取连接的过程如下图:

可以这么理解,它自定义了一个数据源,内部有一个 dataSourceMap,会预先把所有的数据源都加载进这个 mao 里,然后获取连接的时候,根据当前的上下文对象也就是 DynamicDataSourceContextHolder,如果设置了就获取你指定的数据源,没有设置的话就会获取 Primary 的数据源哈。

那么上边的图,我们整体来看一下:

 具体的 DynamicRoutingDataSource 是如何加载所有的数据源,以及如何动态的添加数据源,不是我们这节的重点哈,后续我会单独写一套 DynamicDatasource 里的内容哈, 我们这节是串联一下他们的关系哈。

4  小结

好啦,本节就看到这里哈,有理解不对的地方欢迎指正哈。

posted @   酷酷-  阅读(672)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2023-02-19 【Spring AOP】【一】Spring AOP源码解析文章导读
2023-02-19 【Spring AOP】【二】Spring AOP源码解析-XML方式加载解析过程
点击右上角即可分享
微信分享提示