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

背景

看了某项目的 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 ,参考 《多数据源配置问题》

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

相关推荐
java1234_小锋15 小时前
SpringBoot为什么要禁止循环依赖?
java·数据库·spring boot
折哥的程序人生 · 物流技术专研16 小时前
《Java 100 天进阶之路》第17篇:Java常用包装类与自动装箱拆箱深入
java·开发语言·后端·面试
RH23121116 小时前
2026.5.12 Linux
java·linux·数据结构
小新同学^O^17 小时前
简单学习 --> WebSocket
java·websocket·网络协议·学习
敲代码的瓦龙17 小时前
Java?枚举!!!
java·开发语言
NiceCloud喜云17 小时前
IntelliJ IDEA 保姆级安装 + ClaudeAPI 配置教程
java·开发语言·前端·ide·chrome·docker·intellij-idea
孙69034217 小时前
swf 图片转 pdf
java·后端
用户46825574591317 小时前
Spring AI MCP 实战:tools/list 启动快照陷阱与完整解法
java
吴声子夜歌17 小时前
Java——EnumMap和EnumSet
java·enumset·enummap
gjwjuejin17 小时前
从 Vue 2 到 Vue 3:一位前端工程师的实战学习笔记
java