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