1、问题
testOnBorrow=false导致获取连接cloes_wait 。
http://commons.apache.org/proper/commons-dbcp/configuration.html 官方dbcp配置
org.apache.tomcat.jdbc.pool.DataSource 默认数据源
org.apache.tomcat.jdbc.pool.PoolConfiguration 数据源配置接口
org.apache.tomcat.jdbc.pool.DataSourceProxy 数据源配置代理
org.apache.tomcat.jdbc.pool.PoolProperties 默认配置属性
2、配置项
validationQuery SQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.如果指定,则查询必须是一个SQL SELECT并且必须返回至少一行记录。
testOnBorrow true 指明是否在从池中取出连接前进行检验,如果检验失败,
则从池中去除连接并尝试取出另一个。
注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串
testWhileIdle false 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,
则连接将被从池中去除。
注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串
timeBetweenEvictionRunsMillis -1 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. 如果设置为非正数,则不运行空闲连接回收器线程。
3、举例
SpringCloud服务为例:
spring.datasource.remove-abandoned=true #是否自动回收超时连接
spring.datasource.remove-abandoned-timeout=120 #超时时间(以秒数为单位)
spring.datasource.test-on-borrow=true #检测池里连接的可用性
spring.datasource.test-while-idle=true #指明连接是否被空闲连接回收器进行检验.如果检测失败,则连接将被从池中去除.
spring.datasource.validation-query=SELECT 1; #验证
spring.datasource.time-between-eviction-runs-millis=60000 #连接在池中保持空闲而不被空闲连接回收器线程回收的最小时间值,单位毫秒