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连接池