@#关于数据库连接池连接意外中断的自动重连问题#@

剑事 2006-01-17 11:08:20
在程序和数据库不在一台机器上 因网络中断等一些问题导致数据库连接池报错

即使网络或故障恢复 连接池却不能自动恢复连接 只能重起程序来解决

不知道各位是如何解决连接池自动重连的问题的?
...全文
1168 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuzhu888 2006-03-06
  • 打赏
  • 举报
回复
很少在这看到这样正规的问题了!
infowain 2006-01-25
  • 打赏
  • 举报
回复
ChDw(米) 兄
是否测试过?
super_zzw 2006-01-25
  • 打赏
  • 举报
回复
要看具体数据库连接驱动程序,比如MySql,你可以看驱动的说明书,里面会讲到的。这跟具体驱动是有直接关系的。
剑事 2006-01-25
  • 打赏
  • 举报
回复
CommonPool 没找到自动重连的设置地方
super_zzw 2006-01-25
  • 打赏
  • 举报
回复
一般连接池都已经解决这种问题,就是检测是否链接正常,上面有几位兄弟已经提及, 我曾经使用过Apache得CommonPool,作为链接池(Tomcat的链接池就是用的它), 测试过这个问题,肯定可以应用无关地解决这类问题。
grapepaul 2006-01-19
  • 打赏
  • 举报
回复
以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属性,会影响性能,所以上面各项时间值要酌情设置,设置太小会降低性能,设置太大会使恢复时间过长。
onlyxu 2006-01-19
  • 打赏
  • 举报
回复
这种要求持续连接的问题,光在服务器端配置还是不够的,客户端要定时扫描,处理异常即可
s_phoenix 2006-01-19
  • 打赏
  • 举报
回复
用proxool吧
可以在配置文件里设置,解决这个问题。
剑事 2006-01-18
  • 打赏
  • 举报
回复
我目前捕获peer异常来重置连接池 不过对网络连接不是很管用
ChDw 2006-01-18
  • 打赏
  • 举报
回复
使用连接池一般都支持判断连接的有效性啊
在Tomcat中,设置 validationQuery 参数就行了,你设置一个最简单的SQL,如select sysdate from dual;


这样在每次获取到连接之前,连接池会对这个连接执行上面的语句,如果没有错误就认为这个连接是正确的,否则认为连接已经不可用,放弃它并创建一个新的
takecare 2006-01-18
  • 打赏
  • 举报
回复
ha
boy 2006-01-17
  • 打赏
  • 举报
回复
用自己写的连接池
qingzhuang 2006-01-17
  • 打赏
  • 举报
回复
监听,更新

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧