【Spring事物三千问】DataSource的设计和常用实现——Hikari、Druid
创始人
2024-05-30 18:48:22
0

javax.sql.DataSource

javax.sql.DataSource 是 jdk 提供的接口,各个连接池厂商 和 Spring 都对 DataSource 进行了设计和实现。
javax.sql.DataSource 是连接到物理数据源的工厂接口。它是 java.sql.DriverManager 功能的替代者,是获取数据库连接的首选方法。
DataSource 数据源在必要时可以修改它的属性。例如,如果将数据源移动到其他服务器,则可以更改 DataSource 的属性,这样访问该数据源的代码不需要做任何更改就可以获取到达到目的。
有些 DataSource 的连接池实现还可以支持部分属性在程序运行期间进行修改。

最原始的获取 DB 连接的方法是使用 java.sql.DriverManager#getConnection() 来获取连接。
现在都推荐使用 javax.sql.DataSource#getConnection() 来获取连接。

Spring 对 DataSource 的封装

类图如下:
DataSource.png

图中列出了 DataSource 的三个典型的实现类: HikariDataSource、DruidDataSource 和 AbstractRoutingDataSource

HikariDataSource

HikariDataSource 是 SpringBoot 默认使用的连接池,而且代码量是很少的。
连接池相关的配置参数是放在父类 HikariConfig 中的。

HikariConfig.png

Hikari 连接池的参数分成了两类:一类是可以在运行期间动态修改的;一类是在运行期间不可修改的。
配置项的说明可以参考:
https://github.com/brettwooldridge/HikariCP
https://pdai.tech/md/spring/springboot/springboot-x-mysql-HikariCP.html

关于 connectionTestQuery 参数

connectionTestQuery 参数的作用是:
在一个连接从连接池中拿出来之前,会优先执行 connectionTestQuery 指定的查询语句,从而验证这个连接是存活且有效的。

如果驱动程序支持 JDBC4,那么强烈建议不要设置此属性。
connectionTestQuery 参数是针对不支持 JDBC4 的 Connection#isValid() API 接口的“传统”驱动程序的。
如果没有设置 connectionTestQuery,且驱动程序不支持 JDBC4,那么 HikariCP 将记录一个错误。

DruidDataSource

Druid 连接池是阿里巴巴开源的数据库连接池。Druid 连接池是以监控为主的连接池。
Druid 的配置参数有很多,大致分为了三类:JDBC配置;连接池配置;监控配置

DruidConfig.png

配置说明可以参考:
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
https://pdai.tech/md/spring/springboot/springboot-x-mysql-druid.html
https://github.com/alibaba/druid/wiki/DruidDataSource配置属性列表

AbstractRoutingDataSource

AbstractRoutingDataSource 是 Spring 对 DataSource 的抽象实现。它是一个基于 lookup key ,将 DataSource#getConnection() 的调用路由到目标数据源的抽象数据源实现。
通常都是通过 ThreadLocal 绑定的事务上下文变量来确定路由到哪个目标数据源。

IsolationLevelDataSourceRouter 是 AbstractRoutingDataSource 的实现类,它是一个能基于当前事务隔离级别路由到目标数据源的 DataSource 数据源。

举一反三:多数据源配置的思考

结合前面对 多事物管理器和多数据源处理 的分析,以及上面对 AbstractRoutingDataSource 特性的讲解,我们可以发现,多数据源的切换可以通过两种方式来实现:

1、静态多数据源的方式来配置

  • 首先,配置多个 DataSource
  • 然后,配置多个 SqlSessionFactory。
    当然,这些 SqlSessionFactory 都是基于上面的 DataSource 来配置的,这样就可以通过 MyBatis 的 Mapper 接口来组装 sql 操作 DB 了。

很显然,这种方式比较适合异构的数据源,即每个数据源中的表都是不一样的,这样定义出来的 MyBatis 的 Mapper 接口也不一样。
那如果是分库分表的数据源(或者主从结构的数据源),这类数据源中的表的结构都是一样的,如果也使用这种静态多数据源的方式来配置的话,就需要定义多个一模一样的 Mapper 接口,这样就会显得冗余且不太优雅。

2、动态多数据源切换的方式

基于 AbstractRoutingDataSource 来进行数据源的切换。

动态数据源的切换可以通过自定义注解的方式,对方法打标记来实现,这里对具体的实现方式不做展开

很显然,这种方式就比较适合分库分表的数据源(或者主从结构的数据源),定义一套 MyBatis 的 Mapper 接口就可以操作多个数据源了。

小结

javax.sql.DataSource 是连接到物理数据源的工厂接口。它是 java.sql.DriverManager 功能的替代者,是获取数据库连接的首选方法。

DataSource 三个典型的实现类: HikariDataSource、DruidDataSource 和 AbstractRoutingDataSource

  • HikariDataSource: SpringBoot 默认使用的数据源实现
  • DruidDataSource: 阿里 Druid 连接池使用的数据源实现
  • AbstractRoutingDataSource: Spring 抽象出来的可动态路由的数据源实现

相关内容

热门资讯

安装系统怎样清除分区,全面指南 安装系统前如何清除分区:全面指南在安装操作系统之前,清除分区是一个重要的步骤,它可以帮助确保系统安装...
安装系统自带xps,电脑xps... 如何安装Windows 10系统自带的XPS查看器随着Windows 10系统的普及,许多用户可能会...
保密管理系统安装包,全方位数据... 保密管理系统安装包:全方位数据安全守护神随着信息化时代的到来,数据安全成为企业和机构关注的焦点。保密...
搬瓦工安装win系统,搬瓦工V... 搬瓦工VPS安装Windows系统的详细教程搬瓦工(BandwagonHost)是一家知名的VPS服...
班级必须安装监控系统吗,班级必... 班级必须安装监控系统吗?——探讨校园监控系统的利与弊随着社会的发展和科技的进步,校园监控系统在校园安...
宝安防盗报警系统安装,全方位守... 宝安防盗报警系统安装:全方位守护您的财产安全随着社会经济的发展,人们对家庭和企业的安全防范意识日益增...
斑马系统安装酷狗音乐,如何在斑... 如何在斑马系统上安装酷狗音乐随着智能设备的普及,越来越多的用户开始使用斑马系统。斑马系统以其简洁的界...
安装智能灯光系统,智能家居新篇... 智能家居新篇章——智能灯光系统的安装指南一、了解智能灯光系统智能灯光系统是通过物联网技术,将家庭照明...
傲梅备份安装系统,傲梅备份助手... 傲梅备份助手——轻松安装系统,保障数据安全随着电脑使用时间的增长,系统崩溃、数据丢失等问题时有发生。...
安装系统自定义,打造个性化操作... 系统安装自定义指南:打造个性化操作系统一、选择合适的操作系统二、下载操作系统镜像文件选择好操作系统后...
保密系统安装要求规范,涉密单位... 保密系统安装要求规范随着信息技术的飞速发展,保密工作的重要性日益凸显。为了确保国家秘密、商业秘密和个...
宝马原装香薰系统安装,宝马原装... 宝马原装香薰系统安装指南随着汽车生活品质的提升,越来越多的车主开始关注车内环境的舒适度。宝马原装香薰...
白银图书借阅系统安装,白银图书... 白银图书借阅系统安装指南随着信息化时代的到来,图书借阅系统在图书馆管理中发挥着越来越重要的作用。本文...
安装系统怎么屏幕这么大,安装系... 安装系统后屏幕显示异常大的原因及解决方法在安装操作系统后,有些用户可能会遇到屏幕显示异常大的问题,这...
安卓系统安装文件在哪里,安卓系... 安卓系统安装文件在哪里?全面解析安卓安装文件存放位置随着智能手机的普及,安卓系统因其开放性和丰富的应...
宝马系统车牌怎么安装的,宝马系... 宝马系统车牌安装指南车牌是车辆合法上路的重要标识,正确安装车牌不仅关乎车辆的外观,更关乎法律法规的遵...
安装系统主播,主播必备!轻松安... 主播必备!轻松安装系统,开启直播新篇章随着直播行业的蓬勃发展,越来越多的主播加入了这个大家庭。为了提...
北京净水系统安装,净水系统安装 北京净水系统安装指南:从选购到安装,一步到位随着生活水平的提高,人们对饮用水质量的要求也越来越高。安...
办公电话系统安装图解,轻松搭建... 办公电话系统安装图解:轻松搭建高效通讯平台随着企业规模的不断扩大,办公电话系统已成为企业日常运营中不...
安卓系统安装小雅,小白也能轻松... 安卓系统安装全攻略:小白也能轻松上手随着智能手机的普及,安卓系统因其开放性和丰富的应用生态而受到广大...