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


    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]
      
     
  • 相关阅读:
    mysql-5-aggregation
    mysql-4-functions
    mysql-3-orderby
    技术之心 | 云信和TA们携手打响防疫战
    疫情下的传统商企自救|4个Tips搭建销量过亿直播间
    那些2019年会爆发的泛娱乐黑科技风口
    流量难、获客难、增长难?增长黑客思维“解救”B端业务
    【翻译】Facebook全面推出Watch Party,可多人线上同看直播视频
    深入浅出聊一聊Docker
    C++写日志方法调试
  • 原文地址:https://www.cnblogs.com/williamjie/p/9121227.html
Copyright © 2020-2023  润新知