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的配置,从连接池中销毁这些无效的连接并重建新的连接,如何做,谢谢..
请指教!
运行一段时间后数据库服务器重启,此时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的配置,从连接池中销毁这些无效的连接并重建新的连接,如何做,谢谢..
请指教!
在连接池的配置文件中添加配置属性:validationQuery
为了更好的维护和使用连接池建议修改removeAbandoned,removeAbandonedTimeout,logAbandoned三个属性的值。
从文档的介绍看,validationQuery属性只是检测连接是否正常的,我自己写了一个方法也做这样的事,但不能销毁并重建新的连接。没有看dbcp部分的源码,不知道它是怎么实现的。
再次谢谢 ChDw(米)