一、寫在最前面 java.sql.SQLException: Already closed. java.sql.SQLException: Io 異常: Connection reset by peer: socket write error 而且,一段時間后系統(tǒng)將因為資源被占用完,出現(xiàn)系統(tǒng)完全癱瘓的情況。 二、分析問題 三、DBCP和C3P0連接池常用配置參數(shù)一覽表 DBCP配置 defaultAutoCommit:設(shè)置從數(shù)據(jù)源中返回的連接是否采用自動提交機(jī)制,默認(rèn)值為 true; defaultReadOnly:設(shè)置數(shù)據(jù)源是否僅能執(zhí)行只讀操作, 默認(rèn)值為 false; maxActive:最大連接數(shù)據(jù)庫連接數(shù),設(shè)置為0時,表示沒有限制; maxIdle:最大等待連接中的數(shù)量,設(shè)置為0時,表示沒有限制; maxWait:最大等待秒數(shù),單位為毫秒, 超過時間會報出錯誤信息; validationQuery:用于驗證連接是否成功的查詢SQL語句,SQL語句必須至少要返回一行數(shù)據(jù), 如你可以簡單地設(shè)置為:“select count(*) from user”; removeAbandoned:是否自我中斷,默認(rèn)是 false ; removeAbandonedTimeout:幾秒后數(shù)據(jù)連接會自動斷開,在removeAbandoned為true,提供該值; logAbandoned:是否記錄中斷事件, 默認(rèn)為 false; C3P0配置 C3P0擁有比DBCP更豐富的配置屬性,通過這些屬性,可以對數(shù)據(jù)源進(jìn)行各種有效的控制: acquireIncrement:當(dāng)連接池中的連接用完時,C3P0一次性創(chuàng)建新連接的數(shù)目; acquireRetryAttempts:定義在從數(shù)據(jù)庫獲取新連接失敗后重復(fù)嘗試獲取的次數(shù),默認(rèn)為30; acquireRetryDelay:兩次連接中間隔時間,單位毫秒,默認(rèn)為1000; autoCommitOnClose:連接關(guān)閉時默認(rèn)將所有未提交的操作回滾。默認(rèn)為false; automaticTestTable: C3P0將建一張名為Test的空表,并使用其自帶的查詢語句進(jìn)行測試。如果定義了這個參數(shù),那么屬性preferredTestQuery將被忽略。你不能在這張Test表上進(jìn)行任何操作,它將中為C3P0測試所用,默認(rèn)為null; breakAfterAcquireFailure checkoutTimeout:當(dāng)連接池用完時客戶端調(diào)用getConnection()后等待獲取新連接的時間,超時后將拋出SQLException,如設(shè)為0則無限期等待。單位毫秒,默認(rèn)為0; connectionTesterClassNam idleConnectionTestPeriod initialPoolSize:初始化時創(chuàng)建的連接數(shù),應(yīng)在minPoolSize與maxPoolSize之間取值。默認(rèn)為3; maxIdleTime:最大空閑時間,超過空閑時間的連接將被丟棄。為0或負(fù)數(shù)則永不丟棄。默認(rèn)為0; maxPoolSize:連接池中保留的最大連接數(shù)。默認(rèn)為15; maxStatements:JDBC的標(biāo)準(zhǔn)參數(shù),用以控制數(shù)據(jù)源內(nèi)加載的PreparedStatement數(shù)量。但由于預(yù)緩存的Statement屬于單個Connection而不是整個連接池。所以設(shè)置這個參數(shù)需要考慮到多方面的因素,如果maxStatements與 maxStatementsPerConnecti maxStatementsPerConnecti numHelperThreads:C3P0是異步操作的,緩慢的JDBC操作通過幫助進(jìn)程完成。擴(kuò)展這些操作可以有效的提升性能,通過多線程實現(xiàn)多個操作同時被執(zhí)行。默認(rèn)為3; preferredTestQuery:定義所有連接測試都執(zhí)行的測試語句。在使用連接測試的情況下這個參數(shù)能顯著提高測試速度。測試的表必須在初始數(shù)據(jù)源的時候就存在。默認(rèn)為null; propertyCycle: 用戶修改系統(tǒng)配置參數(shù)執(zhí)行前最多等待的秒數(shù)。默認(rèn)為300; testConnectionOnCheckout 等方法來提升連接測試的性能。默認(rèn)為false; testConnectionOnCheckin:如果設(shè)為true那么在取得連接的同時將校驗連接的有效性。默認(rèn)為false。 |
|