一、前言说明

  1. 如果不会配置druid连接池的话,可以参考我这篇博文:springboot整合druid
  2. 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连接池】通过源码分析遇到的问题的更多相关文章

  1. 通过源码分析Java开源任务调度框架Quartz的主要流程

    通过源码分析Java开源任务调度框架Quartz的主要流程 从使用效果.调用链路跟踪.E-R图.循环调度逻辑几个方面分析Quartz. github项目地址: https://github.com/t ...

  2. 通过源码分析MyBatis的缓存

    前方高能! 本文内容有点多,通过实际测试例子+源码分析的方式解剖MyBatis缓存的概念,对这方面有兴趣的小伙伴请继续看下去~ MyBatis缓存介绍 首先看一段wiki上关于MyBatis缓存的介绍 ...

  3. 通过源码分析RocketMQ主从复制原理

    作者:京东物流 宫丙来 一.主从复制概述 RocketMQ Broker的主从复制主要包括两部分内容:CommitLog的消息复制和Broker元数据的复制. CommitLog的消息复制是发生在消息 ...

  4. 通过源码分析View的测量

    要理解View的测量,首先要了解MeasureSpec,系统在测量view的宽高时,要先确定MeasureSpec. MeasureSpec(32为int值)由两部分组成: SpecMode(高2位) ...

  5. 通过源码安装PostgresSQL

    通过源码安装PostgresSQL 1.1 下载源码包环境: Centos6.8 64位 yum -y install bison flex readline-devel zlib-devel yum ...

  6. Linux下通过源码编译安装程序

    本文简单的记录了下,在linux下如何通过源码安装程序,以及相关的知识.(大神勿喷^_^) 一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件: ...

  7. 微服务架构 ------ 插曲 hikari连接池的配置

    开胃菜:据说hikari连接池很快,快到让另一个连接池的作者抛弃对自己连接池的维护,并且强烈推荐使用hikari 连接池目前我们项目使用的有两个 一个是Druid , 一个是 Hikari, 其中Dr ...

  8. spring boot:使用mybatis访问多个mysql数据源/查看Hikari连接池的统计信息(spring boot 2.3.1)

    一,为什么要访问多个mysql数据源? 实际的生产环境中,我们的数据并不会总放在一个数据库, 例如:业务数据库:存放了用户/商品/订单 统计数据库:按年.月.日的针对用户.商品.订单的统计表 因为统计 ...

  9. 通过源码了解ASP.NET MVC 几种Filter的执行过程

    一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神的工作,而且很多人觉得平时根本不需要知道这些,会用就行了.其实阅读源 ...

  10. 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”

    通过源码了解ASP.NET MVC 几种Filter的执行过程   一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...

随机推荐

  1. ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...

  2. Axure 进度条制作

    拖两个矩形,一个用来做边框,另一个用来做进度 下图进度条的宽要设为2,如果是1的话,看不到背景色动 百分比 进度条 百分比 [[Math.floor(jdt.width/bk.width100)]] ...

  3. SQL Server 还原 备份集中的数据库备份与现有的 'XXX' 数据库不同

    1. 介质集有 2 个介质簇,但只提供了 1 个.必须提供所有成员. 因为在备份时有两个路径,所以备份文件会放在两个文件里面,所以在还原的时候只要把两个都添加了就可以还原了. 2. 备份集中的数据库备 ...

  4. .Net Core 跨域

    Startup.cs public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseCorsMidd ...

  5. Java 线程间通信 —— 管道输入 / 输出流

    本文部分摘自<Java 并发编程的艺术> 管道输入 / 输出流 管道输入 / 输出流和普通的文件输入 / 输出流或者网络输入 / 输出流不同之处在于,它主要用于线程之间的数据传输,而传输媒 ...

  6. 【已解决】Uiautomatorviewer报错:Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationT...

    报错 使用Uiautomatorviewer连接真机报错Unexpected error while obtaining UI hierarchy (获取UI层次结构时出现意外错误) android8 ...

  7. 系统学Prompt,强烈推荐这3个教程,OpenAI还是最强

    系统学Prompt,强烈推荐这3个教程 OpenAI官方Prompt教程 这是最权威.最详细.最值得深入学习的提示词工程学习教程! 教程地址:https://platform.openai.com/d ...

  8. CodeCraft-21 and Codeforces Round #711 (Div. 2) A~C 个人题解

    补题链接:Here 1498A. GCD Sum 题意:给定一个 gcdSum 操作:\(gcdSum(762) = gcd(762,7 + 6 + 2) = gcd(762,15) = 3\) 请问 ...

  9. 2021年vivo互联网技术最受欢迎文章TOP25

    岁月流转,时光飞逝,转眼2021年已经画上句号.过去一年,vivo 互联网技术共推送了107篇文章,涉及服务器.前端.数据库等技术. 今天小编就带大家回顾一下2021年我们最受欢迎的25篇文章(根据阅 ...

  10. ios ipa包上传需要什么工具

    ​ 目录 ios ipa包上传需要什么工具 前言 一.IPA包的原理 二.IPA包上传的步骤 1.注册开发者账号 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包 ...