2009-09-11 59 views
1
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 

      <property name="c3p0.max_size">100</property> 
    <property name="c3p0.idleConnectionTestPeriod">300</property> 
    <property name="c3p0.acquire_increment">1</property> 
    <property name="c3p0.idle_test_period">100</property> <!-- seconds --> 
    <property name="c3p0.max_statements">0</property> 
    <property name="c3p0.min_size">10</property> 
    <property name="c3p0.timeout">100</property> <!-- seconds --> 

這是hibernate.cfg.xml中的配置。我使用的是hibernate 3.2.5和c3p0 0.9。我不知道我在這個配置中錯過了什麼。經過幾次請求後,它顯示連接達到最大池大小並等待免費資源。如果我在本地機器中使用沒有連接池配置,則不會顯示任何錯誤消息。 請幫我找出缺少的部分。連接池中缺少的參數是什麼?

回答

2

我一個使用以下配置的是工作沒有長期運行的測試問題: (我的數據源是由彈簧構成,但可以反正看到C3P0屬性)

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> 
    <property name="jdbcUrl" value="${database.url}" /> 
    <property name="user" value="${database.login}" /> 
    <property name="password" value="${database.password}" /> 
    <property name="minPoolSize" value="3" /> 
    <property name="maxPoolSize" value="100" /> 
    <property name="maxStatements" value="1100" /> 
    <property name="maxStatementsPerConnection" value="120" />  
    <property name="checkoutTimeout" value="5000" /> 
    <property name="idleConnectionTestPeriod" value="60" /> 
</bean> 

不過我會猜測你的問題不是配置。我假設並非所有連接都返回到池中,因此池在一段時間後會乾燥。

+1

我認爲你的連接池沒有連接,因爲它們沒有正確返回到池中。不要增加maxPoolSize,首先修復連接泄漏。 – 2009-09-11 12:58:51

+0

感謝您的建議,問題與連接。 – Shashi 2009-09-15 09:18:31