【druid切换hikari连接池】通过源码分析遇到的问题
一、前言说明
- 如果不会配置druid连接池的话,可以参考我这篇博文:springboot整合druid;
- springboot整合所有的starter方法基本都差不多,添加依赖,开启注解,编写配置,增加yml配置,一气呵成,如果不懂的话,可以看下springboot的自动装配原理,这个面试也会被问到哦;
二、必要操作
(1)删除druid的jar包
- spring-boot 2.x版本之后,默认是集成Hikari的,但是前提是没有导入其他数据源的jar包(分析下源码就知道了),所以必须删除,要不然不生效
(2)确认spring-jdbc包是否引用
- 如果项目中集成mybaits、mybatis-plus(如图)等持久化框架,就不需要额外的添加了,因为底层已经集成了spring-boot-starter-jdbc;
- 如果没有集成持久化,需要添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>

三、问题汇总
(1)org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
- 没有加载到DataSource,自动装配datasource失败
- 根因分析:查看自动装配类DataSourceAutoConfiguration,@ConditionalOnClass注解表示类路径下要有这两个类才会激活当前配置类,DataSource是javax.sql.DataSource包下的, 肯定在当前类路径下,EmbeddedDatabaseType是org.springframework.jdbc.datasource.embedded包下的,属于spring-jdbc的jar包,因此就证实了为啥一定要引入spring-jdbc的jar才能实现自动装配。

(2)spring.datasource.type没有配置,而连接池使用的都是druid,而不是hikari?不是说springboot2.x默认是hikari的嘛???
- 未删除druid-spring-boot-starter或druid的jar包
- 根因分析:查看注入hikari的前提条件,发现有一个@ConditionalOnMissingBean({DataSource.class, XADataSource.class}),表示不存在这两个实例,hikari才会生效;

- 点开这两个类发现,原来是接口,然后查看实现类发现druid是实现该接口的,表示只要激活了druidDataSource,就不会使用默认的hikari数据源,这就是为啥导入druid的jar包之后,hikari是不生效的

(3)配置spring.datasource.type=hikari;但是连接池还是为druid?
- 同上
本次分享了自己遇到坑,如果有那块说的不对,或者有疑问,都可以留言或者私信我,一起学习,一起进步!!!
【druid切换hikari连接池】通过源码分析遇到的问题的更多相关文章
- 通过源码分析Java开源任务调度框架Quartz的主要流程
通过源码分析Java开源任务调度框架Quartz的主要流程 从使用效果.调用链路跟踪.E-R图.循环调度逻辑几个方面分析Quartz. github项目地址: https://github.com/t ...
- 通过源码分析MyBatis的缓存
前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ MyBatis缓存介绍 首先看一段wiki上关于MyBatis缓存的介绍 ...
- 通过源码分析RocketMQ主从复制原理
作者:京东物流 宫丙来 一.主从复制概述 RocketMQ Broker的主从复制主要包括两部分内容:CommitLog的消息复制和Broker元数据的复制. CommitLog的消息复制是发生在消息 ...
- 通过源码分析View的测量
要理解View的测量,首先要了解MeasureSpec,系统在测量view的宽高时,要先确定MeasureSpec. MeasureSpec(32为int值)由两部分组成: SpecMode(高2位) ...
- 通过源码安装PostgresSQL
通过源码安装PostgresSQL 1.1 下载源码包环境: Centos6.8 64位 yum -y install bison flex readline-devel zlib-devel yum ...
- Linux下通过源码编译安装程序
本文简单的记录了下,在linux下如何通过源码安装程序,以及相关的知识.(大神勿喷^_^) 一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件: ...
- 微服务架构 ------ 插曲 hikari连接池的配置
开胃菜:据说hikari连接池很快,快到让另一个连接池的作者抛弃对自己连接池的维护,并且强烈推荐使用hikari 连接池目前我们项目使用的有两个 一个是Druid , 一个是 Hikari, 其中Dr ...
- spring boot:使用mybatis访问多个mysql数据源/查看Hikari连接池的统计信息(spring boot 2.3.1)
一,为什么要访问多个mysql数据源? 实际的生产环境中,我们的数据并不会总放在一个数据库, 例如:业务数据库:存放了用户/商品/订单 统计数据库:按年.月.日的针对用户.商品.订单的统计表 因为统计 ...
- 通过源码了解ASP.NET MVC 几种Filter的执行过程
一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神的工作,而且很多人觉得平时根本不需要知道这些,会用就行了.其实阅读源 ...
- 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”
通过源码了解ASP.NET MVC 几种Filter的执行过程 一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...
随机推荐
- FB08、F.80凭证冲销校验增强
1业务场景 当使用FB08和F.80在前台冲销会计凭证时,需要限制三种不同的会计凭证类型,并报消息到相应的程序中处理这三种会计凭证类型. 2技术实现 在BADI和二代中均未找到合适的增强点,因此根据在 ...
- 若依封装的request.js
import axios from 'axios' import { Notification, MessageBox, Message } from 'element-ui' import stor ...
- mongoose学习记录
1 const mongoose = require('mongoose'); 2 3 mongoose.connect('mongodb://localhost/playground') 4 .th ...
- go 变量逃逸分析
0. 前言 在 小白学标准库之 reflect 篇中介绍了反射的三大法则以及变量的逃逸分析.对于逃逸分析的介绍不多,大部分都是引自 Go 逃逸分析.不过后来看反射源码的过程中发现有一种情况 Go 逃逸 ...
- linux 查看服务器cpu 与内存配置
转载请注明出处: 1. 通过 lscpu 命令查看 服务器的cpu 配置 显示格式: Architecture: #架构 CPU(s): #逻辑cpu颗数 Thread(s) per core: #每 ...
- spring boot 中WebMvcConfigurer相关使用总结
本文为博主原创,未经允许不得转载: WebMvcConfigurer 为spring boot中的一个接口,用来配置web相关的属性或工具插件,比如消息转换器,拦截器,视图处理器,跨域设置等等. 在S ...
- 使用vs插件进行远程调试linux服务器
魔改Raspberry Debugger插件实现linux远程开发 本插件是在树莓派的远程调试下修改实现并未全部本人实现 插件基本使用: 插件目前只能在.net core 3.1到.net 6的框架下 ...
- 【中介者模式(Mediator)】使用Java实现中介者模式
引言 中介者,何为中介者,顾名思义就是我们的在处理A和B之间的关系的时候,引入一个中间人,来处理这两者之间的关系,例如生活中我们需要去租房,买房,都会有中介,来处理房东和租客之间的协调关系,这个就是中 ...
- [转帖]使用 TiUP 扩容缩容 TiDB 集群
https://docs.pingcap.com/zh/tidb/stable/scale-tidb-using-tiup TiDB 集群可以在不中断线上服务的情况下进行扩容和缩容. 本文介绍如何使用 ...
- [转帖]TiDB 数据库的调度
https://docs.pingcap.com/zh/tidb/stable/tidb-scheduling#%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86 PD (Pla ...