使数据库连接池断开后自动重新连接

字体大小: 中小 标准 ->行高大小: 标准
开发中,常常遇到tomcat连接池断掉后(比如网络断线),无法自动重新连接,导致数据库连接始终无效,今天发现此问题的一个解决方案。

首先,在连接池的配置中(XXX.XML),DB的url后加上参数,如sqlserver的加;autoReconnect=true,这是自动重连的基础保证。

其次,一定要在tomcat中抛出连接异常,这一点很重要。一般我们的连接都会用class封装起来,异常也会在class中捕获,并处理掉,这样会导致 连接无法自动恢复。估计tomcat所带的dbcp连接池的重连机制是捕获tomcat中抛出的连接异常再重新连接,所以,连接异常一定要被抛出而不是自 行处理掉。否则连接池会无法重新连接。

所以,实现tomcat自带连接池dbcp自动重连的解决方案是,1。加上autoReconnect=true的参数  2。连接异常要被抛出

 

貌似上面的方法,实战还是无效~~~下面的方法有待验证

数据库断开后服务器重连
Tomcat设置方法 
在配置Context连接池参数时候加上如下参数:复制内容到剪贴板代码: 
              <parameter> 
               <name>validationQuery</name> 
               <value>SELECT COUNT(*) FROM DUAL</value> 
             </parameter> 
             <parameter> 
               <name>testOnBorrow</name> 
               <value>true</value> 
             </parameter> 
             <parameter> 
               <name>testOnReturn</name> 
               <value>true</value> 
             </parameter> 
             <parameter> 
               <name>testWhileIdle</name> 
               <value>true</value> 
             </parameter>

testOnBorrow、testOnReturn、testWhileIdle,这些属性的意义是取得、返回对象和空闲时是否进行验证,检查对象是否有效,默认都为false即不验证。所以当使用DBCP时,数据库连接因为某种原因断掉后,再从连接池中取得连接又不进行验证,这时取得的连接实际已经时无效的数据库连接了,只有把这些属性设为true,再提供validationQuery语句就可以保证数据库连接始终有效了,oracle数据库可以使用SELECT COUNT(*) FROM DUAL,不过DBCP要求validationQuery语句查询的记录集必须不为空,可能这也可以算一个小小的BUG,其实只要validationQuery语句执行通过就可以了。

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68476.html