2014-01-25 66 views
0

爲了訪問DB我已創建使用com.mchange.v2.c3p0.ComboPooledDataSource數據源具有以下性質 `設置爲與ComboPooledDataSource的JdbcTemplate

<property name="initialPoolSize" value="5" /> 
    <property name="minPoolSize" value="5" /> 
    <property name="maxPoolSize" value="10" /> 
    <property name="idleConnectionTestPeriod" value="200" /> 
    <property name="acquireIncrement" value="1" /> 
    <property name="maxStatements" value="25" /> 
    <property name="numHelperThreads" value="3" />` 

吾道類擴展JDBCDaoSupport和上述數據源被設置成JDBCDaoSupport其中inturn提供用於執行查詢的JDBCTemplate。我沒有使用任何事務管理器。 我現在有兩個問題:

  1. 如何交易的管理?在插入之前,JDBCTemplate本身是否創建事務?
  2. 如果數據庫不可用,初始化C3P0池進入無限wait..I想應該有一些財產,我可以設置爲池的初始化超時。 我嘗試' <property name="acquireRetryAttempts" value="1" /> ,但不知道這是否做它的正確途徑。
+0

默認C3P0使得30次嘗試與1000毫秒的延遲['acquireRetryDelay' = 1000]聯繫數據庫['acquireRetryAttempts' = 30]。它不會永遠嘗試。但是,除非你設置'breakAfterAcquireFailure' =屬實,這將開始新一輪每當一個新的客戶端自帶要求一個連接嘗試的,所以它可能似乎是這樣。我對JDBCTemplate一無所知;也許你應該爲該文章或Spring框架添加一個標籤來吸引某些人的注意力。 –

回答

0

我不確定JDBCTemplate是否適用於ComboPooledDataSource ...我試圖用c3p0配置它,但它給了我警告,連接沒有返回到池中,並且爲每個請求創建了新的連接。它只是淹沒了我的MySQL服務器(我與捕獲嘗試應用,過多的連接錯誤)
我也找不到淨關於JdbcTemplate的配置任何東西,除了對RoseIndia一個教程。隨後出現這些錯誤。

我會建議使用的SessionFactory(或者也許你可以喜歡核心的JDBC的PreparedStatement和ResultSet)爲你的數據庫事務。
至於重試次數而言,我不認爲C3P0會去無限方式使用默認配置。您可以使用acquireRetryAttempts和acquireRetryDelay來設置重試嘗試時間。
從mchange網站本身:

「當C3P0數據源的嘗試和失敗,以獲得連接,它會重試多達acquireRetryAttempts次,acquireRetryDelay的每次嘗試之間的延遲。如果所有的嘗試都失敗了,任何等待來自DataSource的連接的客戶端都將看到一個異常,表示無法獲取連接。「

這將是更好經歷從mchange的參考文檔和配置C3P0按您的需求。
mchange c3p0 reference