使用连接池一般都支持判断连接的有效性啊
在Tomcat中,设置 validationQuery 参数就行了,你设置一个最简单的SQL,如select sysdate from dual;
这样在每次获取到连接之前,连接池会对这个连接执行上面的语句,如果没有错误就认为这个连接是正确的,否则认为连接已经不可用,放弃它并创建一个新的

解决方案 »

  1.   

    我目前捕获peer异常来重置连接池 不过对网络连接不是很管用
      

  2.   

    以weblogic为例,其他服务器相似:
    进入某个连接池配置页,进入“连接“页,点击高级选项的”show“显示高级选项,把测试保留的连接、测试创建的连接、测试释放的连接3项前面的复选框全部选中。测试保留的连接   指定 WebLogic Server 是否在将连接提供给客户端之前测试该连接。(必须在下面指定测试表名称。)   测试创建的连接 
      指定 WebLogic Server 是否在创建连接后且将该连接添加到缓冲池中可用连接列表之前对该连接进行测试。(必须指定测试表名称。)   测试释放的连接 
      指定 WebLogic Server 是否在将连接返回到该 JDBC 连接缓冲池之前测试该连接。(必须指定测试表名称。)  连接保留超时: 设为 30 秒 
      在保留缓冲池连接的调用超时之前的秒数(-1 - 32 位正整数)。如果设置为 -1,则调用永远不会超时。   重试创建连接的频率: 设为 30 秒 
      尝试建立与数据库的连接的间隔秒数(0 - 32 位正整数)。适用于在数据库不可用的情况下服务器启动时创建的连接缓冲池。   测试频率:  60 秒 
      自动数据库连接测试之间的秒数(0 - 32 位正整数)。测试失败的连接将被关闭,然后重新打开以重新建立有效的物理数据库连接。(必须在下面指定测试表名称。)  测试表名称:   oracle的连接池默认为 SQL SELECT 1 FROM DUAL,sybase数据库可以填入一个记录不多的配置表名例如sys_code。
      测试物理数据库连接时要使用的数据库表的名称。指定 "测试频率" 并启用 "测试保留的连接"、"测试创建的连接" 和 "测试释放的连接" 时,此字段是必需的。 【测试方法】启动weblogic服务并且发布应用程序后,通过程序进行连接数据库操作成功,然后将数据库关闭,重新启动数据库服务,再执行连接数据库操作,应该还能成功(或等规定的秒数之后再试)。【注意】设置Connection Pool的高级选项中启用test reserved属性,会影响性能,所以上面各项时间值要酌情设置,设置太小会降低性能,设置太大会使恢复时间过长。
      

  3.   

    用proxool吧
    可以在配置文件里设置,解决这个问题。
      

  4.   

    ChDw(米) 兄
    是否测试过?
      

  5.   

    一般连接池都已经解决这种问题,就是检测是否链接正常,上面有几位兄弟已经提及, 我曾经使用过Apache得CommonPool,作为链接池(Tomcat的链接池就是用的它), 测试过这个问题,肯定可以应用无关地解决这类问题。
      

  6.   

    CommonPool 没找到自动重连的设置地方
      

  7.   

    要看具体数据库连接驱动程序,比如MySql,你可以看驱动的说明书,里面会讲到的。这跟具体驱动是有直接关系的。