2011-06-20 170 views
4

我開發一個非常負載(請求)的應用程序。 我曾經在我的appliation以下技術:無法打開連接

  1. JPA/Hibernate作爲persistense層
  2. 春春道
  3. C3P0作爲連接池

我的問題是:我跑我的應用程序,當請求數增加時,拋出異常在「不能打開連接」的 附加層 我增加oracle max session但是我的問題沒有解決 我在C3p0 doc中檢測並且測試它的選項,但是我的問題沒有解決。

感謝您的關注

+0

我很難理解這個問題。你介意編輯它,並且將所有重要信息(連接池設置,甲骨文輪廓限制等),以便有足夠的清晰度? –

+0

我C3P0設置爲:\t \t initialPoolSize = 5 了MinPoolSize = 5 maxPoolSize = 100 maxIdleTime = 30000 unreturnedConnectionTimeout = 90 propertyCycle = 60 acquireRetryDelay = 1000 maxConnectionAge = 0 acquireIncrement = 1個 acquireRetryAttempts = 0 當然 我測試C3p0幾個值和其他選項,但不改變。 – MJM

+0

你可以發佈一個完整的堆棧跟蹤?這可能是因爲你有太多打開的連接,因爲你不知何故泄漏連接(不太可能與Hibernate),或者它可能是你突然因爲某些其他原因訪問數據庫(或許真的是將其關閉) – Pace

回答

3

您增加了Oracle上的最大會話數,但您並未增加連接池的最大大小。例外是告訴你你的游泳池已經用完了。要麼找到保持連接打開的狀態並儘早讓它們釋放,要麼增加池中最大活動連接的數量。

0

是否有可能爲您的DataSource發佈Spring配置。我希望是這樣的:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/> 
    <property name="jdbcUrl" value="${jdbc.connection.url}"/> 
    <property name="user" value="${jdbc.connection.username}"/> 
    <property name="password" value="${jdbc.connection.password}"/> 
    <property name="initialPoolSize" value="5"/> 
    <property name="minPoolSize" value="5"/> 
    <property name="maxPoolSize" value="100"/> 
</bean> 

隨着配置的其他bean,其中數據源是通過引用傳遞:

<bean id="mySampleDao" class="com.example.dao.MySampleDao"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

這是你有什麼?

您使用的是哪個版本的Oracle?

+0

超時是,我有上述結構。我正在使用'Oracle 11g'。 – MJM