很多遗留的程序中对于连接的处理还是不完善的,经常会出现连接池中的连接没有回收的问题。久而久之会造成连接池资源耗尽,建议不要自己管理连接,只要是人都会发错,依靠人来保证资源的回收是不靠谱的。可以参考spring JdbcTemplate的做法,不对外暴露connection,而通过回调函数的方式操作数据库。


目前就碰到了公司的一个框架普遍使用connection,并且需要人为的回收connection,从而导致很多connection忘记回收。于是研究了一下连接池的功能,发现DBCP连接池就提供了connection连接的回收管理功能,这个参数大家可能很熟悉,但不一定知道如何使用。



removeAbandoned="true"  //回收泄漏的连接

removeAbandonedTimeout="60" //认定连接泄漏的超时时间

logAbandoned="true" //打印泄漏连接的调用栈日志


通过上面三个配置,就可以认定那些超时没有回收的连接是泄漏了,然后会自动回收(关闭?),并且还会把泄漏连接的调用栈打印出来(这个太好用了)。