2006-11-17
使用DBCP连接池检测未关闭的数据库连接
我一直使用DBCP连接池,效果还不错。
最近因为朋友的一个J2EE应用一上连接池,很快就会报connection pool exhausted的错误,所以
特地研究了一下如何自动检测未关闭的数据库连接的技术。
研究了tomcat文档中DataSource一章,发现有专门的Preventing dB connection pool leaks一节,
设置数据源的removeAbandoned="true",removeAbandonedTimeout="60",logAbandoned="true"几个属性就可以了。
DBCP会自动把超过timeout时间仍未关闭的连接强制关闭,并且打出异常信息(包含打开连接的代码位置)。
但是要注意,不能依赖这种方式关闭连接,是有一定风险的,比如万一页面操作数据库的时间偶尔超过了
timeout的时间,那会造成执行错误。
对我来说,这个方法最好的用法就是用来检测未关闭的连接,然后修改程序,显式的关闭连接。
一个经验需要说一下,DBCP的log会输出到控制台,如果使用log4j,需要设置log4j.xml中的console appender的threshold为debug.
最近因为朋友的一个J2EE应用一上连接池,很快就会报connection pool exhausted的错误,所以
特地研究了一下如何自动检测未关闭的数据库连接的技术。
研究了tomcat文档中DataSource一章,发现有专门的Preventing dB connection pool leaks一节,
设置数据源的removeAbandoned="true",removeAbandonedTimeout="60",logAbandoned="true"几个属性就可以了。
DBCP会自动把超过timeout时间仍未关闭的连接强制关闭,并且打出异常信息(包含打开连接的代码位置)。
但是要注意,不能依赖这种方式关闭连接,是有一定风险的,比如万一页面操作数据库的时间偶尔超过了
timeout的时间,那会造成执行错误。
对我来说,这个方法最好的用法就是用来检测未关闭的连接,然后修改程序,显式的关闭连接。
一个经验需要说一下,DBCP的log会输出到控制台,如果使用log4j,需要设置log4j.xml中的console appender的threshold为debug.
- 浏览: 120528 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
对于单例模式的一点想法
以前有人讨论过。 一种比较好的实现方式是Initialization on De ...
-- by buaawhl -
对于单例模式的一点想法
yxbbing 写道# private static Singleton INS ...
-- by Lucas Lee -
对于单例模式的一点想法
# private static Singleton INSTANCE; # ...
-- by yxbbing -
对于单例模式的一点想法
biubiu 写道除了你已经提出的两种办法,没有其他可以run everywhe ...
-- by Lucas Lee -
对于单例模式的一点想法
slangmgh 写道 JVM 不保证代码INSTANCE=new Single ...
-- by Lucas Lee






评论排行榜