Druid連接池 一個(gè)設(shè)置 removeAbandonedTimeout : 數(shù)據(jù)庫(kù)??
<!-- 超過(guò)時(shí)間限制是否回收 --> ?
<property name="removeAbandoned" value="true" /> ?
<!-- 超時(shí)時(shí)間;單位為秒。180秒=3分鐘 --> ?
<property name="removeAbandonedTimeout" value="180" /> ?
<!-- 關(guān)閉abanded連接時(shí)輸出錯(cuò)誤日志 --> ?
<property name="logAbandoned" value="true" /> ?
?使用druid連接池的超時(shí)回收機(jī)制排查連接泄露問(wèn)題


說(shuō)什么holder為空
? ? 第一眼看到holder就像到Spring的源碼, 里面到處是holder(笑)
? ? 但是這里的holder不是Spirng里面的,是Druid的
? ? 這個(gè)holder大概是用來(lái)hou住連接池里面的連接的.
? ? 然后為什么為空了呢? 目測(cè)是哪個(gè)鏈接壞了, 或者被意外的關(guān)閉了...
? ? 根據(jù)異常調(diào)源碼 ?at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:942)

看不出啥來(lái). 只能將日志繼續(xù)看看, 還是看不出啥來(lái)
? ? 然后看了上面代碼幾遍后, 老覺(jué)得?isRemoveAbandoned() 這個(gè)方法有鬼.
? ? 查看調(diào)用處,


這里不對(duì)頭, ??timeMillis >= removeAbandonedTimeoutMillis ?timeMillis 這個(gè)是getConnection()被調(diào)用時(shí)的時(shí)間
? ? 意思就是一個(gè)連接被get后, 超過(guò)了?removeAbandonedTimeoutMillis這么久我就弄死你.
? ? 然后繼續(xù)找removeAbandonedTimeoutMillis 這玩意在哪里設(shè)置的 ? ,最后發(fā)現(xiàn)是在
<property name="removeAbandoned" value="true" />
<property name="removeAbandonedTimeout" value="1800" />
? ? 初始化配置的這里設(shè)置的, ?這兩個(gè)參數(shù)的大概意思就是,?
? ? 通過(guò)datasource.getConnontion() 取得的連接必須在removeAbandonedTimeout這么多秒內(nèi)調(diào)用close(),要不我就強(qiáng)制關(guān)閉.(就是conn不能超過(guò)指定的租期)
? ? 然后調(diào)成2個(gè)小時(shí)~~~
? ? 然后程序成功跑完~~~華麗麗的等了50分鐘
? ? 總結(jié):
? ? 連接池為了防止程序從池里取得連接后忘記歸還的情況, 而提供了一些參數(shù)來(lái)設(shè)置一個(gè)租期, 使用這個(gè)可以在一定程度上防止連接泄漏
? ? 但是如果你的業(yè)務(wù)真要跑這么久~~~~那還是注意下這個(gè)設(shè)置.
轉(zhuǎn)載于:https://my.oschina.net/xiaominmin/blog/1597116