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的配置,从连接池中销毁这些无效的连接并重建新的连接,如何做,谢谢..
请指教!

解决方案 »

  1.   

    在Tomcat的连接池中设置 validationQuery 属性,那么在每次从池中获得连接时都先调用此validationQuery SQL语句去验证连接的正确与否
      

  2.   

    谢谢,问题解决
    在连接池的配置文件中添加配置属性:validationQuery
    为了更好的维护和使用连接池建议修改removeAbandoned,removeAbandonedTimeout,logAbandoned三个属性的值。
    从文档的介绍看,validationQuery属性只是检测连接是否正常的,我自己写了一个方法也做这样的事,但不能销毁并重建新的连接。没有看dbcp部分的源码,不知道它是怎么实现的。
    再次谢谢 ChDw(米)