背景
最近程序在服务器上运行,总是出现数据库连接断开的问题,常见异常如下,所以专门来规范一下配置。
2020-03-31 18:08:03.253 ERROR [DruidPooledStatement.java:357] CommunicationsException, druid version 1.1.10, jdbcUrl : jdbc:mysql://************:3306/test?autoReconnect=true&autoReconnectForPools=true&characterEncoding=UTF-8&allowMultiQueries=true, testWhileIdle true, idle millis 2328, minIdle 5, poolingCount 1, timeBetweenEvictionRunsMillis 30000, lastValidIdleMillis 2328, driver com.mysql.jdbc.Driver, exceptionSorter com.alibaba.druid.pool.vendor.MySqlExceptionSorter
2020-03-31 18:08:03.255 ERROR [JdbcUtils.java:75] close connection error
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.
配置
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
initial-size: 5
min-idle: 5
max-active: 100
max-wait: 10000
validation-query: SELECT 1 FROM DUAL
test-on-borrow: true
test-on-return: true
test-while-idle: true
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
配置说明
属性列 | 说明 |
---|---|
type | 指定连接池 |
driver-class-name | 数据库驱动类 |
initial-size | 初始化时建立物理连接的个数 |
min-idle | 最小连接数量 |
max-active | 最大连接数量 |
validation-query | 用来检测连接是否有效的sql,要求是一个查询语句,常用select ‘x’。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。 |
test-on-borrow | 申请连接时执行validation-query检测连接是否有效 |
test-on-return | 归还连接时执行validation-query检测连接是否有效 |
test-while-idle | 申请连接的时候检测,如果空闲时间大于time-between-eviction-runs-millis,执行validationQuery检测连接是否有效。 |
time-between-eviction-runs-millis | 1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于min-evictable-idle-time-millis则关闭物理连接。2) est-while-idle的判断依据 |
min-evictable-idle-time-millis | 连接保持空闲而不被驱逐的最小时间 |
参考
DruidDataSource配置
DruidDataSource配置属性列表
DBCP连接属性
数据库连接池到底应该设多大
分析 “druid com.alibaba.druid.util.JdbcUtils Line:75 - close connection error” 出现的根源
解决Caused by: java.sql.SQLRecoverableException: IO Error: Connection reset相关问题