背景
最近程序在服務器上運行,總是出現數據庫連接斷開的問題,常見異常如下,所以專門來規範一下配置。
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 | 連接保持空閒而不被驅逐的最小時間 |