【问题标题】:c3p0 connection refill in tomcat在tomcat中重新填充c3p0连接
【发布时间】:2016-09-15 03:25:42
【问题描述】:

2016-05-16 09:49:20,505 [http-bio-8080-exec-6] WARN [com.mchange.v2.c3p0.impl.DefaultConnectionTester] - 异常的 SQL 状态“08007”由 statusOnException( ) 意味着数据库无效,并且池应该用新的连接重新填充自己。 在 com.mchange.v2.c3p0.impl.NewProxyConnection.commit(NewProxyConnection.java:803) 2016-05-16 09:49:20,506 [http-bio-8080-exec-6] WARN [com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool] - ConnectionTest 失败,报告所有先前获取的连接可能无效.池将被重置。 在 com.mchange.v2.c3p0.impl.NewProxyConnection.commit(NewProxyConnection.java:803) 在 com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) 在 com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) 在 com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)

【问题讨论】:

    标签: database spring connection c3p0


    【解决方案1】:

    这是我的强迫症,我想修复任何警告,我正在尝试更改属性

    这是我的旧版本:

    <property name="minPoolSize"><value>5</value>
        </property>
        <property name="maxPoolSize">
        <value>30</value>
        </property>
        <property name="initialPoolSize">
        <value>10</value>
        </property>
        <property name="maxIdleTime">
            <value>60</value>
        </property>
        <property name="acquireIncrement">
        <value>5</value>
        </property>
        <property name="maxStatements">
        <value>0</value>
        </property>
        <property name="idleConnectionTestPeriod">
        <value>60</value>
        </property> -->
        <property name="acquireRetryAttempts">
        <value>30</value>
        </property>
        <property name="breakAfterAcquireFailure">
        <value>true</value>
        </property>
        <property name="preferredTestQuery" value="SELECT 1"/>    
    

    错误的

    新版本:

    <property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}" />
        <property name="initialPoolSize" value="${c3p0.initialPoolSize}" />
        <property name="maxIdleTime" value="${c3p0.maxIdleTime}" />
        <property name="maxPoolSize" value="${c3p0.maxPoolSize}" />
        <property name="maxStatements" value="${c3p0.maxStatements}" />
        <property name="maxStatementsPerConnection" value="${c3p0.maxStatementsPerConnection}" />
        <property name="minPoolSize" value="${c3p0.minPoolSize}" />
    

    【讨论】:

    • 值:c3p0.acquireIncrement=5 c3p0.idleConnectionTestPeriod=60 c3p0.initialPoolSize=10 c3p0.maxIdleTime=60 c3p0.maxPoolSize=30 c3p0.maxStatements=200 c3p0.maxStatementsPerConnection=30 c3p0.minPoolSize=5
    【解决方案2】:

    当在 c3p0 连接测试期间连接发生异常时,c3p0 会检查异常的 SQL 状态,以评估这是否意味着只有连接无效,或者池中的所有连接都可能无效,因为状态信号。如果 SQL 状态表明所有连接都可能无效,c3p0 将重置池,关闭()并丢弃它之前获取的连接并用新的连接替换它们。

    您无需对此采取任何措施,只要这种情况很少见或偶尔发生即可。 c3p0 正在尝试尽快从数据库中断中恢复。它主动替换其连接,而不是单独等待每个连接失败,然后被替换。

    如果这种情况经常发生,则说明您的数据库或连接测试的执行方式存在问题。但这只有在经常发生时才值得追查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-26
      • 2012-01-15
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 2017-12-01
      相关资源
      最近更新 更多