本文参考自:https://blog.csdn.net/zys_1997/article/details/78107783
首先,明确连接、活动连接(连接正被使用)、空闲连接的概念
创建连接
1、初始化 2、空闲连接低于最小空闲minIdle
销毁连接
1、空闲连接数目高于最大空闲 2、活动连接被遗弃
回收行为
1、空闲连接回收器(定时执行)2、连接回收器(maxwait后触发)
--------------------------
initialSize 初始化连接数,即连接池启动时池子中的连接数目
maxActive 最大活动连接数,即连接池中可同时连接的最大数目
minIdle 最小空闲连接,连接池中最少的空闲的连接数,
低于这个数量时,意味着连接不够用了,会被创建新的连接
默认为0,该参数越接近maxIdle,性能越好,因为连接的创建和销毁,都是需要消耗资源的;
不宜太大,因为在机器很空闲的时候,也会创建低于minidle个数的连接,类似于jvm参数中的Xmn设置。
maxIdle 最大空闲连接
超过此参数时空闲连接将被释放,如果设置为负数表示不限制
默认为8个,maxIdle不能设置太小,因为假如在高负载的情况下,连接的打开时间比关闭的时间快,会引起连接池中idle的个数上升超过maxIdle,而造成频繁的连接销毁和创建,类似于jvm参数中的Xmx设置
maxWait 请求连接时,最长的等待时间。
单位ms,当没有可用连接时,连接池会等待连接释放,超过该时间限制会抛出异常,如果设置-1表示无限等待(默认为无限)。
validationQuery 验证操作时使用得SQL语句
testWhileIdle 连接空闲时是否被空闲连接回收器(如果有)验证
如果验证失败,将直接回收
testOnBorrow 连接被借走(取出使用)时需不需要验证
默认值是true,即每次从连接池中取出连接时,都需要执行validationQuery中的SQL进行测试,这会导致性能下降7-10倍。
一般设为false,不要测试。
--------------------
以下三者配合使用:
minEvictableIdleTimeMillis 连接空闲了多久会被空闲连接回收器回收
numTestsPerEvictionRun 空闲连接回收器每次检查多少个连接
timeBetweenEvictionRunsMills 空闲连接回收器运行周期
每timeBetweenEvictionRunsMills运行一次空闲连接回收器(独立线程)。
每次检查numTestsPerEvictionRun个连接,如果连接空闲时间超过minEvictableIdleTimeMillis就先销毁,之后如果小于minIdle数量,就新建连接,维护数量不少于minIdle,过行了新老更替。
--------------------
以下三者配合使用:
removeAbandonedTimeout 连接多久没被使用即视为Abandoned,即连接泄漏
removeAbandoned 当active连接快到maxActive连接的时候,是否回收无效的连接回收
备注:maxWait的时间不要设得太长,maxWait如果设置太长那么客户端会等待很久才激发回收事件。
logAbandoned 回收事件后,是否在log中打印出回收Connection的错误信息,包括在哪个地方用了Connection却忘记关闭了,在调试的时候很有用。