请教关于DBCP 连接池的非常规问题

minsky 2006-03-16 12:44:34
Tomcat (5.0.25) 和数据库(SQL Server 2000)位于两台不同的机器上, 使用DBCP配置好连接池, 工作正常。
运行一段时间后数据库服务器重启,此时Tomcat中还是维持原来的连接池,执行以下代码:
...
Context context = new InitialContext(); //正常
DataSource datasource = (DataSource) context.lookup("java:comp/env/jdbc/SqlServer");//正常
conn = datasource.getConnection();//正常
stat = connection.createStatement();//正常

stat.executeQuery("Select * From ....");
抛出 SQLException:connection reset by peer...

我认为是因为用老的连接和数据库通信导致的。

请教:在不重启Tomcat的情况下,能否利用代码或者修改DBCP的配置,从连接池中销毁这些无效的连接并重建新的连接,如何做,谢谢..
请指教!
...全文
188 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
minsky 2006-03-16
  • 打赏
  • 举报
回复
谢谢,问题解决
在连接池的配置文件中添加配置属性:validationQuery
为了更好的维护和使用连接池建议修改removeAbandoned,removeAbandonedTimeout,logAbandoned三个属性的值。
从文档的介绍看,validationQuery属性只是检测连接是否正常的,我自己写了一个方法也做这样的事,但不能销毁并重建新的连接。没有看dbcp部分的源码,不知道它是怎么实现的。
再次谢谢 ChDw(米)

ChDw 2006-03-16
  • 打赏
  • 举报
回复
在Tomcat的连接池中设置 validationQuery 属性,那么在每次从池中获得连接时都先调用此validationQuery SQL语句去验证连接的正确与否

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧