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

news/2023/5/28 9:08:22

背景

壬寅年腊月廿八,坚守在工作岗位。看了一下项目的 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.exyb.cn/news/show-4568383.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

没有superfetch服务?

在Win10 1903版本之前如Win10 1803 Win10 1809等版本,超级预读服务名为superfetch。 然而在Win10 1903之后这个服务被微软改名为Sysmain。

关于superfetch

啥是superfetch 这是微软在Windows Vista中推出的项新技术。据微软官方宣称,该技术采用了新算法,它能够有效的提高硬盘的工作效率。它不仅拥有Windows XP预取技术的全部优点,还能够对程序的运行状况做一个实时监测。还可以根据用户的使用习惯…

如何通过关闭superfetch减小Win7备用缓存提高电脑速度

1. 我们认为的Win7内存机制是这样的 当物理内存不够用,使用虚拟内存。当物理内存够用,就不会往硬盘上写东西。 2. 事实上,Win7的内存机制是这样的 物理内存大概有40%的部分叫做备用内存,官方的说法,这块备用内存是可…

硬盘使用率100%——禁用SuperFetch

Win8/Win8.1的时候都会在任务管理器中发现硬盘使用率过高,甚至会达到100% Superfetch技术采用了新算法,可以高效提高硬盘工作效率。它不但继承了Windows XP预取技术的全部优点,还进一步具备监视程序运行时状况,时间等详细情况的功…

【LeetCode高频100题-3】冲冲冲(持续更新23.1.19)

文章目录62. 不同路径题意解法1 排列组合解法2 动态规划62. 不同路径 题意 一道数学题,排列组合/小学奥赛题。动态规划不是一般来解决最值问题的吗,这道题为什么会想到dp? 解法1 排列组合 从左上角到右下角,一共要走mn-2步&am…

superfetch_将SuperFetch更改为仅在Vista中缓存系统启动文件

superfetchAfter writing the article last week about disabling SuperFetch, my good friend Daniel Spiewak commented that SuperFetch “loads the wrong thing more often than not”, which reminded me of a registry tweak… You can tell Windows to only cache the …

精简Windows Defender,关闭superfetch

精简Windows Defender 1.win10系统设置defender不扫描硬盘的方法 有用户反馈,win10系统windows defender会自动进行全盘扫描,导致电脑出现卡顿,浪费时间。那么win10系统如何关闭defender扫描硬盘?下面小编就为大家详细介绍关闭d…

superfetch_如何在Windows Vista上禁用SuperFetch

superfetchThe SuperFetch service in Windows Vista preloads your system’s memory with the applications that you use most often. This makes launching of those applications much faster, but it might be an unwanted behavior for system tweakers or gamers. Wind

win7老计算机,SuperFetch对Win7老电脑的影响

SuperFetch的概念Superfetch内存管理机制会将用户可能使用的应用程序页面利用内存可用空间进行预加载;尽可能地避免系统发生从硬盘的页面调用;让应用程序最快速度开启;不会由于计算机长时间闲置而使突然使用变得响应迟缓;在退出大…

Dos常见功能命令

Dos命令 打开CMD的方式 开始系统命令提示符Win键R 输入cmd打开控制台(推荐使用)在任意的文件夹下面,按住shift键鼠标右击,在此处打开命令行窗口资源管理器的地址栏前面加上cmd(空格)路径 管理员方式运行:选择以管理员方式运行(在1的基础上…

Unity3D问答题及简单计算器

1.解释对象与资源的区别与联系,根据官方案例,分别总结资源和对象组织的规则/规律。 答:在显式支持面向对象的语言中,”对象”一般是指类在内存中装载的实例,具有相关的成员变量和成员函数(也称为方法)。对象一般都是直…

Unity 离散仿真引擎学习

文章目录1. 简答题(1)解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系。(2)下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与…

用HTMLJavaScript写计算器给【导航】出来的【新大陆】

用HTML&JavaScript写计算器给【导航】出来的【新大陆】?写计算器??如何实现??1. 布局?2. 交互准备?3. 交互分解?4. 获取第一个数?5. 获取第二个数?6. 获取运算符?7. 运算?8.输出?9. 运行?10. Debug?11. 【新大陆】闪亮登场?12. Debugi…

【K哥爬虫普法】辛苦钱被中间商抽走八成,还因此锒铛入狱

我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了“K哥爬虫普法”专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识,知晓如何合法合规利用…

采用tdd实现计算器_在您的团队中成功采用了tdd

采用tdd实现计算器Test-Driven Development is a game-changing methodology for any software project with a life span more extensive than one year; unfortunately, many developers and companies fail to embrace it. In the first instance, it might seem a problem …

3dgame作业2

一、简答题 1. 解释游戏对象(GameObjects)和资源(Assets)的区别与联系 资源表示游戏中能够使用的任何的物体、声音和脚本等,资源可以来自文件的导入以及unity自身的创建。游戏对象是表示文字、道具以及场景的基础物件…

微软自带计算器

今天在使用进制转换的时候使用了以前经常使用的在线进制转换(16进制转10进制)。。。例如: {"result":0,"game_session_info":{"host_server_ip":734383739,"host_server_port":5024,"game_sess…

ios实现简单的计算器

<span style"font-size:24px;"></span> <span style"font-size:24px;">// // ZYAppDelegate.m // Calculator // // Created by mac on 15-7-30. // Copyright (c) 2015年 zhiyou. All rights reserved. //#import "ZYAppDeleg

IOS实现小型计算器

作为一名初学者&#xff0c;编辑一款能够在IOS操作系统上运行的计算器是一件很值得自豪的事情&#xff0c;网络上虽然后很多相关的文章和代码&#xff0c;功能也很强大但是我感觉相关的计算器比加复杂&#xff0c;晦涩难懂&#xff0c;所以我想通过这个小小的计算器&#xff0c…