SpringBoot:关于默认连接池Hikari的源码剖析

1.起因

因为这两天在给公司的一个项目升级SpringBoot版本,遇到了一些坑,升级项目版本:SpringBoot1.5.x到SpringBoot2.0.x

今天早上双库操作遇到一个问题:jdbcUrl is required with driverClassName

在网上查询了一下将url改为jdbc-url就可以了。

解决后,闲来无事,准备一探究竟。

2.url改为jdbc-url的原因

SpringBoot2.0默认使用了Hikari作为连接池

于是我们先找到Hikari连接池的包

点开它的配置项:HikariConfig,搜索jdbcUrl,然后找到原因:

这里原因就找到了,Hikari没有url属性,与之对应的是jdbc-url属性

因此我们使用url时会导致:jdbcUrl is required with driverClassName(jdbcUrl没有传入)

3.SpringBoot2.0在哪里指定的默认连接池

我们首先先创建一个连接池

这里的DataSourceBuilder是

提供的,于是我们点击进去看看这个类

 这里默认提供支持的数据库连接池有三种,那么SpringBoot实在哪里默认选择的呢?

 我们继续看这个类

在build方法这里,有一个getType()方法,大概就在这里指定的类型吧

这里的意思就是,如果指定了连接池类型就是用当前类型,没有指定的话,就加载默认的连接池属性

于是我们再看findType方法

这里就是从DATA_SOURCE_TYPE_NAMES 里面加载连接池类型,默认从下标为0的加载

private static final String[] DATA_SOURCE_TYPE_NAMES = new String[]{"com.zaxxer.hikari.HikariDataSource", "org.apache.tomcat.jdbc.pool.DataSource", "org.apache.commons.dbcp2.BasicDataSource"};

 于是默认的就为Hikari连接池

 

posted @ 2019-01-24 16:23  市井俗人  阅读(3016)  评论(0编辑  收藏  举报