springboot配置預設資料庫連線池並解決初始連線未生效問題
阿新 • • 發佈:2018-11-01
目前Spring Boot中預設支援的連線池有dbcp,dbcp2, tomcat, hikari三種連線池。
在springboot1.5之前預設tomcat連線池, 版本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 2.0的版本預設連線池為HikariCP;
接著我們配置 application.properties
# 驅動配置資訊 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
至此,小夥伴們以為配置已經完成了,但是當我們配置完這些發現並沒有生效。可以通過show processlist 檢視mysql 初始化連線上,發現並不是我們想要的連線數,
,最後 通過重寫datasource方法
資料庫連線可以使用DataSource池進行自動配置。
import rt org.apache.tomcat.jdbc.pool.DataSource; ie; import rt org.springframework.boot.context.properties.ConfigurationtionProperties; import rt org.springframework.context.annotation.Bean; im; import rt org.springframework.context.annotation.Configurationtion; import rt org.springframework.context.annotation.PropertySourcource; @Configuration @ConfigurationProperties(prefix = "= "spring.datasource") e") public class DataSourceConfig { private String url; private String username; private String password; private int maxTotal; private int minIdle; private int maxIdle; private int initialSize; private String logAbandoned; private String removeAbandoned; private String removeAbandonedTimeout; private String maxWaitMillis; private String timeBetweenEvictionRunsMillis; private String numTestsPerEvictionRun; private String minEvictableIdleTimeMillis; @Bean public DataSource getDataSource() { DataSource dataSource = new DataSource(); dataSource.setDriverClasClassName("com.mysql.jdbc.Driver"); "); dataSource.setUrl(url(url); dataSource.setUsername(ume(username); dataSource.setPassword(prd(password); dataSource.setMaxActive(ive(maxTotal); dataSource.setMinIdle(mie(minIdle); dataSource.setMaxIdle(mae(maxIdle); dataSource.setInitialSizlSize(initialSize); return dataSource; } //getset方法省略 }
在經過測試 ,發現mysql連結確實增加了,纏繞幾天的問題終於解決了,豁然開朗