使用springboot不自動初始化數(shù)據(jù)庫連接池
springboot不自動初始化數(shù)據(jù)庫連接池
簡介
有時候我們想自己動態(tài)的初始化數(shù)據(jù)庫連接池,但是springboot 的@SpringBootApplication注解會自動去初始化數(shù)據(jù)庫連接池,不配置的話會啟動失敗,如下提示
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Dbcp2.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.commons.dbcp2.BasicDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
INFO - Unregistering JMX-exposed beans on shutdown
解決方案
辦法就是排除自動初始化的類
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application implements CommandLineRunner {
...
}
加上這么一句
(exclude = {DataSourceAutoConfiguration.class})
就可以跳過數(shù)據(jù)庫的自動初始化,自己為所欲為了~
記錄下spring boot關(guān)于數(shù)據(jù)庫連接池的一個小坑
環(huán)境:spring boot 1.5、JDK1.8
application.properties配置
# 驅(qū)動配置信息 spring.datasource.url = jdbc:mysql://127.0.0.1:3306/mealsystem?useUnicode=true&characterEncoding=utf-8 spring.datasource.username = root spring.datasource.password = 123456 spring.datasource.driverClassName = com.mysql.jdbc.Driver #連接池的配置信息 spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 spring.datasource.maxWait=60000 spring.datasource.timeBetweenEvictionRunsMillis=60000 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=SELECT 1 FROM DUAL spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false spring.datasource.poolPreparedStatements=true spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 spring.datasource.filters=stat,wall,log4j spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
先找到這個類
org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder
在下面的源碼中打個斷點
public DataSource build() {
Class<? extends DataSource> type = this.getType();
DataSource result = (DataSource)BeanUtils.instantiate(type);
this.maybeGetDriverClassName();
this.bind(result);
return result;
}
啟動項目

我們可以發(fā)現(xiàn),在沒有配置spring.datasource.type時,spring boot默認的連接池是tomcat-jdbc
也就是說我們在application.properties中配置的連接池參數(shù)是無效的。
好,那我們再配置下這個屬性,使用阿里巴巴的druid
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
再啟動下

再來看看1.5版本org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder的源碼
private static final String[] DATA_SOURCE_TYPE_NAMES = new String[] {
"org.apache.tomcat.jdbc.pool.DataSource",
"com.zaxxer.hikari.HikariDataSource",
"org.apache.commons.dbcp.BasicDataSource", // deprecated
"org.apache.commons.dbcp2.BasicDataSource" };
- spring boot 1.5的版本默認連接池為tomcat-jdbc
- spring boot 2.0的版本默認連接池為HikariCP
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring-boot-maven-plugin:unknown的完美解決方法
這篇文章主要介紹了spring-boot-maven-plugin:unknown的完美解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
java對象類型轉(zhuǎn)換和多態(tài)性(實例講解)
下面小編就為大家?guī)硪黄猨ava對象類型轉(zhuǎn)換和多態(tài)性(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
SpringBoot+WebSocket實現(xiàn)IM及時通訊的代碼示例
項目中碰到需要及時通訊的場景,使用springboot集成websocket,即可實現(xiàn)簡單的及時通訊,本文介紹springboot如何集成websocket、IM及時通訊需要哪些模塊、開發(fā)和部署過程中遇到的問題、以及實現(xiàn)小型IM及時通訊的代碼,需要的朋友可以參考下2023-10-10
jpa?onetomany?使用級連表刪除被維護表數(shù)據(jù)時的坑
這篇文章主要介紹了jpa?onetomany?使用級連表刪除被維護表數(shù)據(jù)時的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
java實現(xiàn)基于UDP協(xié)議的聊天小程序操作
UDP是與TCP相對應(yīng)的協(xié)議,UDP適用于一次只傳送少量數(shù)據(jù)、對可靠性要求不高的應(yīng)用環(huán)境。正因為UDP協(xié)議沒有連接的過程,所以它的通信效率高;但也正因為如此,它的可靠性不如TCP協(xié)議高,本文給大家介紹java實現(xiàn)基于UDP協(xié)議的聊天小程序操作,感興趣的朋友一起看看吧2021-10-10
Springboot mybatis plus druid多數(shù)據(jù)源解決方案 dynamic-datasource的使用詳
這篇文章主要介紹了Springboot mybatis plus druid多數(shù)據(jù)源解決方案 dynamic-datasource的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11

