多个datasource的配置与实现原理
阅读原文时间:2023年07月13日阅读:4

    一般情况下,一个项目中只会有一个datasource,但是在某些情况、或者业务需求的情况下会出现一个项目有多个datasource的情况,当满足一定条件的时候,对数据库的操作就会从一个一个datasource切换到另一个datasource.

那么这种多数据源的配置与实现原理是什么样的?

一、spring boot 下配置多个数据源:

        https://blog.csdn.net/u013412772/article/details/79833262

二、实现原理:

        目前持久层框架常用的就是mybatis与hibernate, 与数据库进行交互的工作就是持久层框架做的事。要连接到数据库,就需要数据库的url,端口,密码等信息,这些信息的抽象出来我们就叫做数据源,也就是datasource,下面是常见datasource的一种配置:

    

上图是yml格式的配置,也有xml、properties等格式。格式不同,但核心是一样的,就是保存连接数据库的各种必要信息。当spring框架或者其他框架扫描到个datasource的配置,就会根据这个配置生成一个datasource的bean实例。

     而持久层框架进行了一系列准备工作后,需要将sql语句发送到数据库,那么这个时候就需要使用datasource, 其中最核心的就是持久层框架定义了一个 Transaction接口,这个Transcation接口有个getConnection()方法,内容就是从datasource中获取一个与数据库的Connection,通过操作这个Connection将数据发送到数据库:

    mybatis定义的transaction:

Hibernate定义的transaction接口,与mybatis有一些区别,但是在核心方法commit上,都是在操作connection对象:

多个Transaction接口、类的定义:

,从上图可以看出,transaction这个定义在很多地方使用。实际上,只要是需要通过网络进行通信的功能,都会有这么一个类似datasource的东西来存储通信时的必要配置信息(url、端口、超时时间、协议等等···),这个东西可能叫做datasource,也可能叫做其他名字,但他其实底层本质就是一个socket,通过层层封装与抽象来提供给大家使用。

 所以就算不使用spring boot的那一套配置,自己也能实现多数据源的切换,无非就是先定义多个datasource的bean实例出来,然后根据项目中使用的持久层框架的不同来重写Transaction接口中的方法(也可能是其他接口,主要是看框架操作datasource时是怎么定义的接口,然后再实现该接口就可以了)。以上虽然短短几句话就说完了,以后有时间再贴出自己实现的多个数据源的实现代码。

热门专题

怎么删除一个对象数组中所有对象的一个属性

django foreignkey 返回id对应名称

华为ar1220F WEB界面老是登录失败

gltf模型局部运动

window10如何搭建内网dns

chemdraw自动调整分子结构

pymysql 插入多条数据 executemany 的用法

python 查看ADB端口号

mysql is null走索引吗

QueryBuilders 查询一个字母

感觉学了四年计算机,还没入门

python模拟上传文件

面试的过程问有没有使用juc包

vue中根据判断条件this.$confirm

system ng配置

list把其中一个提到第一个

shell 判断数组中是否有指定值

android逆向---charles抓包失败

前端谷歌js文件如何打断点测试

nodejs protobufjs grpc 流上传

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章