数据库连接池自动重新连接问题
2006年08月28日 23:03:00
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
增加配置项如下:
#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 写道: | ||
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]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人