数据库连接池自动重新连接问题

2006年08月28日 23:03:00

http://sailorls.blogchina.com/2606862.html                 
tomcat连接池自动重新连接问题- -
Tag: Tag    tomcat    连接池    重新连接                          
在以往的开发中,常常遇到tomcat连接池断掉后(比如网络断线),无法自动重新连接,导致数据库连接始终无效,今天发现此问题的一个解决方案。
首先,在连接池的配置中(XXX.XML),DB的url后加上参数,如sqlserver的加;autoReconnect=true,这是自动重连的基础保证。
其次,一定要在tomcat中抛出连接异常,这一点很重要。一般我们的连接都会用class封装起来,一场也会在class中捕获,并处理掉,这样会导致连接无法自动恢复。估计tomcat所带的dbcp连接池的重连机制是捕获tomcat中抛出的连接异常再重新连接,所以,连接异常一定要被抛出而不是自行处理掉。否则连接池会无法重新连接。
所以,实现tomcat自带连接池dbcp自动重连的解决方案是,1。加上autoReconnect=true的参数  2。连接异常要被抛出

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=123&threadID=6653&tstart=1500
数据库连接池自动恢复问题.详情在内容里. 

我现在做一个项目.其中使用两个oracle,中间共享一个数据库.库文件在磁盘阵列中.我现在是创建两个连接池.分别用thin的方式连接.然后用multipool将两个连接池做load-balance.但现在有个问题.我想实现当两个数据库都down掉.再重起时.我的程序可以直接用.不用重起weblogic.可是weblogic却不这样.当数据库down掉后再重起.weblogic连接池显示还是报错.我看有的资料用testtable.我也设了.刷新周期也设了.可是不好使了.版本或哪位大哥有什么方法了.能否详细告知一下.谢谢了.另有,我的weblogic是做集群.Test Table Name:测试表名

Init SQL:初始化SQL语句 如:select * from 测试表名

请问如何设置"Init SQL:初始化SQL语句 如:select * from 测试表名"

我记得原先回答过一个类似的问题。设定3个地方:
1。TestConnectionsOnReserve  : true
2。RefreshMinutes parameter  : 设定connection pool的刷新时间
3。Test Table Name : Dual

http://csdn.eyeah.cn/3116/1110/1127/112835571.html

比如对于c3p0来讲,acquireRetryAttempts这个参数,如果>0就是你指定的连接次数,如果<0则表示无限制的连接。
 
增加配置文件c3p0.properties
增加配置项如下:
#Defines how many times c3p0 will try to acquire a new Connection from the database 
#before giving up. 
#If this value is less than or equal to zero, c3p0 will keep trying to fetch a Connection 
#indefinitely.
acquireRetryAttempts=60
#Milliseconds, time c3p0 will wait between acquire attempts.
acquireRetryDelay=60000
#If true, a pooled DataSource will declare itself broken and be permanently closed if a 
#Connection cannot be obtained from the database after making acquireRetryAttempts to 
#acquire one.
#If false, failure to obtain a Connection will cause all Threads waiting for the pool to
# acquire 
#a Connection to throw an Exception, but the DataSource will remain valid, and will 
#attempt to 
#acquire again following a call to getConnection(). 
breakAfterAcquireFailure=false
 
scud 写道:
huazii 写道:
正如楼上所言 
据我所致common.dbcp好像不支持


dbcp也有一个 validationQuery ,难道不行吗? 

哪里写着不支持哪?

哦 果然 谢谢指教。
 
 
好些日子没到论谈了,有这么多回贴,谢谢大家指教。 
不过我可能没有表达清楚,首先数据库和服务器不在一台机器上,所以如: jdbc:oracle:thin:@localhost:1521:database 这样的是不行的。应该是 
: jdbc:oracle:thin:@ip:1521:database 问题是网络终断,比如:将网络禁用。 
在数据库中查V$session发现所有的连接都不存在了。这时无论怎么连都不会连上了(当然了网络断了嘛)。这时在恢复网络连接,在数据库中查V$session发现所有的连接还是不存在,连接池也无法恢复的。
 
robbin 写道:
这台服务器上跑了很多网站,其中不乏好几个Java做的网站,他们都建立了数据库连接池。有一次我在MySQL Administrator里面查看连接,一时好奇,把那些数据库连接池建立的连接都给kill掉了,我想看看会不会报错? 结果呢?没一会功夫,他们又自动连接上了,呵呵。我觉得现在的数据库连接池都应该有这个功能吧。


kill掉的效果和网络突然端的效果不一样的,网络断了可能无法一下让c/s双方都明白连接已经断了。像ssh登陆,如果网络突然断掉,服务器里的用户还是显示在线,和kill掉不一样的。支持断网重联的pool应该有一个断线检测的机制。
 
引用:

kill掉的效果和网络突然端的效果不一样的,网络断了可能无法一下让c/s双方都明白连接已经断了。像ssh登陆,如果网络突然断掉,服务器里的用户还是显示在线,和kill掉不一样的。支持断网重联的pool应该有一个断线检测的机制。


同意!但我现在所用的如:dbcp,c3p0都不支持,weblogic可以通过管理重连。有没有支持断网重联的pool?[/quote]
  
 

猜你喜欢

转载自www.cnblogs.com/williamjie/p/9121227.html