Druid连接池⼀个设置removeAbandonedTimeout:数据库Druid连接池 ⼀个设置 removeAbandonedTimeout : 数据库
<!-- 超过时间限制是否回收 -->
<property name="removeAbandoned" value="true" />
<!-- 超时时间;单位为秒。180秒=3分钟 -->
<property name="removeAbandonedTimeout" value="180" />
<!-- 关闭abanded连接时输出错误⽇志 -->
<property name="logAbandoned" value="true" />
使⽤druid连接池的超时回收机制排查连接泄露问题
说什么holder为空
第⼀眼看到holder就像到Spring的源码, ⾥⾯到处是holder(笑)
但是这⾥的holder不是Spirng⾥⾯的,是Druid的
这个holder⼤概是⽤来hou住连接池⾥⾯的连接的.
然后为什么为空了呢? ⽬测是哪个链接坏了, 或者被意外的关闭了...
根据异常调源码  at com.alibaba.druid.ConnectionDirect(DruidDataSource.java:942)
看不出啥来. 只能将⽇志继续看看, 还是看不出啥来
然后看了上⾯代码⼏遍后, ⽼觉得 isRemoveAbandoned() 这个⽅法有⿁.
查看调⽤处,
这⾥不对头,  timeMillis >= removeAbandonedTimeoutMillis  timeMillis 这个是getConnection()被调⽤时的时间
意思就是⼀个连接被get后, 超过了 removeAbandonedTimeoutMillis这么久我就弄死你.
然后继续removeAbandonedTimeoutMillis 这玩意在哪⾥设置的  ,最后发现是在
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="1800" />
初始化配置的这⾥设置的,  这两个参数的⼤概意思就是,
通过Connontion() 取得的连接必须在removeAbandonedTimeout这么多秒内调⽤close(),要不我就强制关闭.(就是conn 不能超过指定的租期)
druid连接池配置详解然后调成2个⼩时~~~
然后程序成功跑完~~~华丽丽的等了50分钟
总结:
连接池为了防⽌程序从池⾥取得连接后忘记归还的情况, ⽽提供了⼀些参数来设置⼀个租期, 使⽤这个可以在⼀定程度上防⽌连接泄漏    但是如果你的业务真要跑这么久~~~~那还是注意下这个设置.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。