我在tomcat版本7上部署了一個java應用程序。對於數據源,我使用了連接到mysql數據庫的c3p0。 它工作正常多年,最近我開始得到這個錯誤: 「客戶端超時等待從com.mchange.v2.resourcepool.BasicResourcePool獲取資源」。c3p0客戶端超時,等待從com.mchange.v2.resourcepool.BasicResourcePool獲取資源
當我遇到此問題時,唯一的解決方案是重新啓動應用程序。重新啓動mysql並沒有幫助。
我也有PHP應用程序使用保存數據庫,他們不受影響,他們正常工作。
我的Java應用程序只用於一個小團隊,它是一個後端應用程序。
這裏是我的C3P0配置:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db?relaxAutoCommit=true&autoReconnect=true&autoReconnectForPools=true" />
<property name="user" value="viva4578" />
<property name="password" value="amd139fbg" />
<property name="initialPoolSize" value="5" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="20" />
<property name="maxConnectionAge" value="14400" />
<property name="checkoutTimeout" value="30000" />
<property name="acquireIncrement" value="1" />
<property name="acquireRetryAttempts" value="30" />
<property name="testConnectionOnCheckin" value="true" />
<property name="testConnectionOnCheckout" value="true" />
<property name="preferredTestQuery" value="SELECT 1" />
<property name="idleConnectionTestPeriod" value="3600" />
<property name="maxIdleTime" value="7200" />
<property name="maxIdleTimeExcessConnections" value="1800" />
<property name="unreturnedConnectionTimeout" value="3600" />
<property name="debugUnreturnedConnectionStackTraces" value="true" />
</bean>
這裏是C3P0的輸出日誌啓動應用程序後:
Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [
acquireIncrement -> 1,
acquireRetryAttempts -> 30,
acquireRetryDelay -> 1000,
autoCommitOnClose -> false,
userOverrides -> {},
automaticTestTable -> null,
breakAfterAcquireFailure -> false,
checkoutTimeout -> 30000,
connectionCustomizerClassName -> null,
connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester,
contextClassLoaderSource -> caller,
dataSourceName -> z8kflt9n1b12nsh118544e|7bc1a68b,
debugUnreturnedConnectionStackTraces -> true,
description -> null,
driverClass -> com.mysql.jdbc.Driver,
extensions -> {},
factoryClassLocation -> null,
forceIgnoreUnresolvedTransactions -> false,
forceUseNamedDriverClass -> false,
identityToken -> z8kflt9n1b12nsh118544e|7bc1a68b,
idleConnectionTestPeriod -> 3600,
initialPoolSize -> 5,
jdbcUrl -> jdbc:mysql://localhost:3306/db?relaxAutoCommit=true&autoReconnect=true&autoReconnectForPools=true,
maxAdministrativeTaskTime -> 0,
maxConnectionAge -> 14400,
maxIdleTime -> 7200,
maxIdleTimeExcessConnections -> 1800,
maxPoolSize -> 20,
maxStatements -> 0,
maxStatementsPerConnection -> 0,
minPoolSize -> 5,
numHelperThreads -> 3,
preferredTestQuery -> SELECT 1,
privilegeSpawnedThreads -> false,
properties -> {user=******, password=******},
propertyCycle -> 0,
statementCacheNumDeferredCloseThreads -> 0,
testConnectionOnCheckin -> true,
testConnectionOnCheckout -> true,
unreturnedConnectionTimeout -> 3600,
usesTraditionalReflectiveProxies -> false
]
我使用C3P0的版本0-0.9.5。
如果有人能幫助
謝謝
好,非常感謝您的意見。我的意見30秒是很多,除非有緩慢的查詢。 – kchetoua
我換了一個log4j的配置,現在我看到這個異常 – kchetoua
簽出的資源已過期,並且將被銷燬:com.mchange.v2.c3p0.impl.NewPooledConnection 也許這就是問題的根本原因是什麼? – kchetoua