项目引入多类数据源依赖,MyBatisPlus 是如何确定使用哪种数据源的?

news2024/11/18 15:27:03

背景

壬寅年腊月廿八,坚守在工作岗位。看了一下项目的 pom.xml 依赖,发现了好几个数据库连接相关的包,有 commons-dbcp2、c3p0、hikaricp、druid-spring-boot-starter,这可是四种不同的数据库连接池呢,一个项目中引入这么多连接池的依赖,MyBatis 是怎么确定使用哪个连接池的数据源呢?

好久没看源码了,猛然一下竟然想不起来了,本文来梳理一下这些连接池及这个疑问。

基础知识

数据库连接及各种工具的依赖关系:

  1. 连接池的种类及效率排序:hikaricp > druid > dbcp2 > c3p0 。
  2. quartz 依赖了 c3p0 和 Hikaricp 两个包。
  3. spring-jdbc 依赖 Hikaricp 。
  4. MyBatisPlus 依赖 spring-jdbc 。
  5. Spring Boot 2 默认的数据库连接池是 Hikaricp 。
  6. Spring 容器注入的 Bean 默认是单例。

数据源的确定流程

首先,自动注入 druid 连接池。项目中引入了 druid-spring-boot-starter 依赖后,如果没有自定义数据源,那么它会自动注入一个 DruidDataSource 实例。

其次,引入 mybatis-plus-boot-starter 后,它自动注入了 MyBatis 需要的 SqlSessionFactory 。MyBatisPlus 自动注入流程从 MyBatisPlusAutoConfiguration 开始:
在这里插入图片描述
自动注入 SqlSessionFactory 类依赖一个 DataSource 对象,而这个对象又由前面的 druid starter 注入了。

所以就确定了 MyBatis 操作数据库使用的连接池的种类就是 DruidDataSource ,此时就是修改 spring.datasource.type 属性为 Hikaricp ,也是不生效的,除非不引入 druid starter 这个自动注入类。

启示录

MyBatis 多数据源本质也是这个流程,针对不同的 DAO 扫描包依赖的 SqlSessionFactory ,配置不同的 DataSource ,参考 《多数据源配置问题》。

本文思考的问题还不是属于多数据源的范畴,本质是单数据源类型选择的问题。

看了一眼手机,壬寅年腊月廿八,这个「廿」 ,竟然读 niàn ,也可以读 “二十”,但是打不出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github访问办法

GitHub GitHub是为开发者提供Git仓库的托管服务。这是一个让开发者与朋友、同事、同学及陌生人共享代码的完美场所。 GitHub除提供Git仓库的托管服务外,还为开发者或团队提供了一系列功能,帮助其高效率、高品质地进行代码编写。 GitHub的创始人之一Chr…

使用GPIO模拟I2C的驱动程序分析

使用GPIO模拟I2C的驱动程序分析 文章目录使用GPIO模拟I2C的驱动程序分析参考资料:一、回顾I2C协议1.1 硬件连接1.3 协议细节二、 使用GPIO模拟I2C的要点三、 驱动程序分析3.1 平台总线设备驱动模型3.2 设备树3.3 驱动程序分析1. I2C-GPIO驱动层次2. 传输函数分析四、…

SQL注入简介与原理

数据来源 本文仅用于信息安全学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 SQL注入 首先从SQL注入存在的代码来看 假如这里的id没有过滤,我们就可以输入…

JDK7-hashmap源码

解决冲突的方法 提高效率 特殊情况扰动算法 当冲突大于一定量时需要扩容 在JDK1.7中,HashMap是由数组单向链表实现的,原理图如下: HashMap基本用法 public static void main(String[] args) {//key-value, 数组存储头指针的引用地址&#xf…

SpringCloud项目日志接入ELK实战

写作背景 前面我对SpringCloud Netflix相关的组件,Eureka、Ribbon、OpenFeign、Hystrix和Zuul都进行了复习,后面随着代码越写越多就想着,要不就慢慢完善这个项目代码,把工作里用到的东西慢慢在这个Demo级别的项目里用起来&#x…

idea高效实用优化技巧

文章目录IDEA介绍配置优化注释模板快捷键硬件升级IDEA介绍 IDEA,全称IntelliJ IDEA,是Java语言的集成开发环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、C…

gdb使用简介

目录 编译时,加入-g选项 不加-g选项,将不能加断点 加入-g选项,才能加断点 run与start start run break continue 编译时,加入-g选项 不加-g选项,将不能加断点 加入-g选项,才能加断点 run与start …

经典的 海量数据面试题 —— 送你一套僻邪剑谱~

目录 前言 一、哈希切割 题目一 解法一:哈希切割 二、位图的应用 题目一: 解法一:哈希切割 解法二:双位图 解法三:单位图(进阶版) 题目二 解法一:哈希切割 解法二&#xff…

ChatGPT踩坑(too many signups from the same IP)

ChatGPT踩坑 首先是去OpenAI的官网注册,点击API 进去注册一个账号 然后就会发现注册不成功,继续尝试就会出现下面的情况 后来我发现比较靠谱的方法是,通过google账号注册(或许微软账号也行),后面会有一步让…

python经典刷题-关于文件、日期的题

目录标题1,统计目录下所有文件大小-os的使用2,按文件后缀整理文件夹3,递归搜索目录找出最大文件4,计算不同课程的最高分最低分--分组处理5,实现不同文件的关联6,批量txt文件的合并7,统计每个兴趣…

植物神经紊乱在心脑血管方面可能出现哪些症状

大家好,当植物神经的失衡涉及心脑血管的时候,可能会出现哪些症状表现? 植物神经紊乱为什么会涉及心脑血管? 你们知道吗?植物神经紊乱的实质,是由于体内庞大的神经系统的失衡导致的。而植物神经,…

javaEE 初阶 — 网络通信基础

文章目录1. IP 地址2. 端口号3. 认识协议4. 协议分层4.1 分层的作用4.2 OSI七层模型4.3 TCP/IP五层(或四层)模型4.4 网络数据传输的基本流程4.4.1 发送方4.4.2 接收方1. IP 地址 IP地址主要用于标识网络主机、其他网络设备(如路由器&#xff…

PowerSNMP for .NET 6.1.0.0 Crack

关于适用于 .NET 的 PowerSNMP 创建自定义 SNMP 管理器、陷阱和代理应用程序以监视和控制网络设备。 PowerSNMP for .NET 包括简单网络管理协议 (SNMP) 组件,可无缝集成线程通信、安全和编码/解码,因此您可以快速开发自定义 SNMP 应用程序。该开发工具需…

HW_DIMM分类与比较

DIMM 分类参考链接 UDIMM UDIMM is also known as unbuffered DIMM, that is, unbuffered dual in-line memory module. The application of this memory module means that the address and control signals can directly reach the DRAM chip on the server DIMM without g…

[hive]维度模型分类:星型模型,雪花模型,星座模型|范式

一、维度模型分类:星型模型,雪花模型,星座模型1、星型模型星型模型中只有一张事实表,以及0张或多张维度表,事实与纬度表通过主键外键相关联,维度之间不存在关联关系,当所有纬度都关联到事实表时,整个图形非常像一种星型…

ESP32设备驱动-MPU-9250 3轴陀螺仪/加速度计/磁力计驱动

MPU-9250 3轴陀螺仪/加速度计/磁力计驱动 1、MPU9250介绍 MPU-9250 是面向智能手机、平板电脑、可穿戴传感器和其他消费市场的第二代 9 轴运动处理单元™(Motion Processing Unit™)。 MPU-9250 采用 3x3x1mm QFN 封装,是世界上最小的 9 轴运动跟踪设备,采用了最新的 Inven…

钢结构之槽钢及角钢

槽钢 槽钢是截面为凹槽形的长条钢材,截面形状为槽形的型钢。 槽钢的基本介绍 槽钢属建造用和机械用碳素结构钢,是复杂断面的型钢钢材,其断面形状为凹槽形。槽钢主要用于建筑结构、幕墙工程、机械设备和车辆制造等。在使用中要求其具有较好的…

没有选品经验的电商卖家该在TikTok上卖什么商品?超店有数来帮你

TikTok近年来增速迅猛,凭借巨大的流量频频登榜多国APP下载榜首,而其电商业务同样处于快速增长状态。2022上半年,TikTok电商的GMV已超10亿美元;2022年全年,TikTok Shop在东南亚GMV增长逾三倍,达到44亿美元。…

【SpringBoot2】SpringBoot中配置文件详解

SpringBoot使用一个全局的配置文件,配置文件名是固定的,支持两种格式 1、两种格式(properties,yml) application.properties application.yml 由此可以看出 application.yml 文件格式的内容更为简洁,清晰…

SpringAMQP - 发布订阅模式

目录 发布订阅介绍 FanoutExchange简介 FanoutExchange案例 常见小问题 DirectExchange简介 DirectExchange案例 常见小问题 TopicExchange简介 TopicExchange案例 发布订阅介绍 发布(Publish)、订阅(Subscribe)发布订阅…