注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

是缘是情是童真

如果你用笑脸面对 你会看见别人的笑脸

 
 
 

日志

 
 

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

2011-09-21 16:41:43|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
开发中,常常遇到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语句执行通过就可以了。

  评论这张
 
阅读(4363)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017