2015-07-06 79 views
0

我在應用程序中使用c3p0進行Hibernate與Oracle數據庫的連接。我們有兩臺並行運行的服務器。通常工作正常,但在重新啓動其中一臺服務器時,通過c3p0嘗試連接到數據庫時出現異常。拋出的根異常是重新啓動服務器後c3p0上的連接問題

Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. 
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) 
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) 
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) 
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) 
    ... 53 more 

在另一次重新啓動後,服務器的行爲正常。我正在使用hibernate-c3p0-4.3.6.Final。

這裏是我的C3P0連接配置

<bean id="dataSource" 
class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" 
<property name="driverClass" value="oracle.jdbc.OracleDriver" /> 
<property name="jdbcUrl" value="${jdbc.url}" /> 
<property name="user" value="${jdbc.user}" /> 
<property name="password" value="${jdbc.password}" /> 
<property name="maxPoolSize" value="50"/> 
     <property name="initialPoolSize" value="2"/> 
     <property name="minPoolSize" value="1"/> 
     <property name="maxStatements" value="200"/> 
     <property name="maxIdleTime" value="300"/> 
     <property name="acquireIncrement" value="10"/> 
     <property name="unreturnedConnectionTimeout" value="90"/> 
     <property name="maxConnectionAge" value="120"/> 
</bean> 

有沒有人遇到過類似的行爲?

+0

你可以發佈屬性文件用於分配屬性休眠.. ??你在哪裏有jdbc.url ..還有你在用什麼驅動? –

+0

這聽起來像是在Oracle中設置了最大連接限制,並且它已被破壞,因此沒有人獲得任何新連接 – gerrytan

回答

0

這是可重複的嗎?如果沒有,我猜這是兩個問題之一:

  1. 要麼創建到數據庫的連接實際存在問題。如果我沒有正確記得Oracle的話,現有的連接可能很容易工作,但是新的連接無法創建,例如當偵聽器服務不可用時。

  2. 或者某些進程在啓動期間用完了所有可用的連接。例如,當進程由某種隊列啓動並由於隊列相當滿的停機時間而發生這種情況。請注意,連接限制可能是連接池中配置的或Oracle數據庫中配置的連接限制。

相關問題