本帖最后由 wskscfgu 于 2010-01-27 19:59:35 编辑

解决方案 »

  1.   

    Tomcat中配置c3p0数据库连接池的时候
    <parameter>
      <name>testConnectionOnCheckin</name>
      <value>true</value>
    </parameter>
    <parameter>
      <name>idleConnectionTestPeriod</name>
      <value>60</value>
    </parameter>
      

  2.   

    这是要求c3po热部署,看看它支持不,不支持你就只能重启。
    连接池中已取得的连接都是旧数据库的,当数据库变了之后,连接旧数据库如果不通了,那么连接也就无效了,通过域名配置的数据库,如果c3po能够断线重连或者无效重连的话,切换数据库服务器之后,取得的新连接应该是新数据库的。
    如果c3po的机制是这样,那么1楼的配置应该可行。
      

  3.   

    他们是用连接池方式来连接数据库的
    是写到配置文件,但是这些配置文件在启动的时候就被保存到cache里面去了否则连接池的效果就没有。每次链接都去访问啊。。
    关键就是怎么让连接池在配置改了以后,重新读取配置文件
    这个就要看你的服务器是否支持,不支持你也只能干瞪眼啊
    我对一切服务器都不熟悉。
      

  4.   


    两个数据库的连接是同一个后台,也就是同一个存储空间,不用担心数据的问题。
    现在关键的问题是,当老数据库挂掉后,转到新数据库,怎么让连接都使用新的连接。testConnectionOnCheckin 是在取得一个新连接时候检查新连接的有效性,对于老连接没有做处理。
    有没有什么参数,可以检查老连接的有效性?
      

  5.   

    <property name="testConnectionOnCheckout">true</property>
    <property name="testConnectionOnCheckin">true</property>
    <property name="idleConnectionTestPeriod" value="小于数据库切换时间就可以了"/>
    提交和获得都校验,性能没什么保证。还不如来个预警重新启动。
      

  6.   


    testConnectionOnCheckin是获得连接检查连接的有效性,
    idleConnectionTestPeriod是每隔多少秒检查一次空闲的连接,(这里的检查是指什么?)
    我设置了这个,但得到连接后,新连接是可以用的,老连接使用后提交异常信息  "连接已关闭"
    照理说,如果这两个设置了,那么老连接应该在得到后检查下,如果检查不通用,
    客户端是不可能拿到并使用的。
    但事实是客户端拿到并使用了,矛盾了。为什么?
      

  7.   


    这个不是使用 C3P0 来解决的,这应该在数据库集群进行考虑(比如 Oracle 的 RAC),程序只是数据库的客户端,不用关心数据库是一台,还是多台集群的。
      

  8.   

          程序是数据库的客户端,但客户端连接池中有部分坏连接怎么办,
          如果客户端拿这个连接操作,会报错。
          c3p0检查一个连接有效性是怎么检查的。
          我的目的是:去c3p0连接池拿到连接后,如果连接不正常,
          那么我就换一个连接,直到取得正常连接为止。
      

  9.   

    我进行了以下测试:
         1.windows下启动c3p0连接池,连接hp-ux上的DB2数据库
         2.hp-ux下启动c3p0数据池,连接hp-ux上的DB2数据库
         3.windows下启动c3p0连接池,连接windows上的DB2数据库
         然后关闭DB2数据库,又启动
    测试结果:
         2,发N个交易正常,N个交易后,一直接报关闭的连接异常
         1,3正常    永远正常
     不知道什么原因?
         
      

  10.   

    我的配置如下:
    <property name="driver">com.ibm.db2.jcc.DB2Driver</property>
    <property name="jdbcUrl">jdbc:db2://197.3.5.26:60008/emute:currentSchema=DB2;</property>
    <property name="user">db2</property>
    <property name="password">db2</property>
    <property name="testConnectionOnCheckout">true</property>
    <property name="testConnectionOnCheckin">true</property>
    <property name="automaticTestTable">con_test</property>
    <property name="checkoutTimeout">30000</property>
    <property name="idleConnectionTestPeriod">30</property>
    <property name="initialPoolSize">80</property> 
    <property name="maxIdleTime">60</property>
    <property name="maxPoolSize">200</property>
    <property name="minPoolSize">100</property>
    <property name="maxStatements">300</property>