您的位置:首页 > 数据库

使用BasicDataSource引发的数据库连接中断的问题和解决方法

2014-06-16 10:33 786 查看
最近碰到一个问题,应用程序每天的第一次进行系统访问时,会报一个奇怪的错误,最后经过仔细的跟踪,错误信息找到了,如下所示:

很明显,这个错误信息表示数据库连接实际上已经断开了,因为在深夜没有客户来访问系统。但是程序中并没有检测到这个信息,仍然使用过期的数据库连接,那肯定会报错。而在之后,datasource检测到这个问题,则尝试重新进行连接,这样接下来的链接就正常了。

在项目中使用的数据库连接池是dbcp,即apache-dbcp的BasicDataSource。最初的配置为:

经仔细分析,这样的配置不会对连接的连接超时以及有效性进行检测,因此会发生以上的问题。要解决这个问题,就需要额外的检测手段和处理方法,还好,dbcp本身提供了这些配置,只不过当前系统中并没有这样的配置。

在处理这个问题中,需要处理好以下这些问题

连接多少时间的数据库连接被认为是无效的
如何检测一个连接是有效的
如何检测那些执行SQL时间长的连接
周期性连接检测需要多长时间执行一次

上面的这些问题,dbcp都提供了有效的配置方法,只需要详细的配置即可。如详细的配置如下:

经过这样配置之后,之前的问题就不再出现了。引起这个问题的原因是多方面的,但对于问题主因,仍是对dbcp未完全了解,总是按默认配置进行开发。在某些场景下就会突发一些想不到的问题。

转载请标明出处:i flym

本文地址:http://www.iflym.com/index.php/code/201308280001.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐