C3P0連接池參數配置說明
created by cjk on 2017.8.15
- 常用配置
- initialPoolSize:連接池初始化時創建的連接數,default : 3(建議使用)
- minPoolSize:連接池保持的最小連接數,default : 3(建議使用)
- maxPoolSize:連接池中擁有的最大連接數,如果獲得新連接時會使連接總數超過這個值則不會再獲取新連接,而是等待其他連接釋放,所以這個值有可能會設計地很大,default : 15(建議使用)
- acquireIncrement:連接池在無空閑連接可用時一次性創建的新數據庫連接數,default : 3(建議使用)
- 管理連接池的大小和連接的生存時間
- maxConnectionAge:配置連接的生存時間,超過這個時間的連接將由連接池自動斷開丟棄掉。當然正在使用的連接不會馬上斷開,而是等待它close再斷開。配置為0的時候則不會對連接的生存時間進行限制。default : 0 單位 s(不建議使用)
- maxIdleTime:連接的最大空閑時間,如果超過這個時間,某個數據庫連接還沒有被使用,則會斷開掉這個連接。如果為0,則永遠不會斷開連接,即回收此連接。default : 0 單位 s(建議使用)
- maxIdleTimeExcessConnections:這個配置主要是為了快速減輕連接池的負載,比如連接池中連接數因為某次數據訪問高峰導致創建了很多數據連接,但是后面的時間段需要的數據庫連接數很少,需要快速釋放,必須小於maxIdleTime。其實這個沒必要配置,maxIdleTime已經配置了。default : 0 單位 s(不建議使用)
- 配置連接測試
- automaticTestTable:配置一個表名,連接池根據這個表名用自己的測試sql語句在這個空表上測試數據庫連接,這個表只能由c3p0來使用,用戶不能操作。default : null(不建議使用)
- preferredTestQuery:與上面的automaticTestTable二者只能選一。自己實現一條SQL檢測語句。default : null(建議使用)
- idleConnectionTestPeriod:用來配置測試空閑連接的間隔時間。測試方式還是上面的兩種之一,可以用來解決MySQL8小時斷開連接的問題。因為它保證連接池會每隔一定時間對空閑連接進行一次測試,從而保證有效的空閑連接能每隔一定時間訪問一次數據庫,將於MySQL8小時無會話的狀態打破。為0則不測試。default : 0(建議使用)
- testConnectionOnCheckin:如果為true,則在close的時候測試連接的有效性。default : false(不建議使用)
- testConnectionOnCheckout:性能消耗大。如果為true,在每次getConnection的時候都會測試,為了提高性能,盡量不要用。default : false(不建議使用)
- 配置PreparedStatement緩存
- maxStatements:連接池為數據源緩存的PreparedStatement的總數。由於PreparedStatement屬於單個Connection,所以這個數量應該根據應用中平均連接數乘以每個連接的平均PreparedStatement來計算。同時maxStatementsPerConnection的配置無效。default : 0(不建議使用)
- maxStatementsPerConnection:連接池為數據源單個Connection緩存的PreparedStatement數,這個配置比maxStatements更有意義,因為它緩存的服務對象是單個數據連接,如果設置的好,肯定是可以提高性能的。為0的時候不緩存。default : 0(看情況而論)
- 重連相關配置
- acquireRetryAttempts:連接池在獲得新連接失敗時重試的次數,如果小於等於0則無限重試直至連接獲得成功。default : 30(建議使用)
- acquireRetryDelay:連接池在獲得新連接時的間隔時間。default : 1000 單位ms(建議使用)
- breakAfterAcquireFailure:如果為true,則當連接獲取失敗時自動關閉數據源,除非重新啟動應用程序。所以一般不用。default : false(不建議使用)
- checkoutTimeout:配置當連接池所有連接用完時應用程序getConnection的等待時間。為0則無限等待直至有其他連接釋放或者創建新的連接,不為0則當時間到的時候如果仍沒有獲得連接,則會拋出SQLException。其實就是acquireRetryAttempts*acquireRetryDelay。default : 0(與上面兩個,有重復,選擇其中兩個都行)
- 定制管理Connection的生命周期
- connectionCustomizerClassName:用來定制Connection的管理,比如在Connection acquire 的時候設定Connection的隔離級別,或者在Connection丟棄的時候進行資源關閉,就可以通過繼承一個AbstractConnectionCustomizer來實現相關方法,配置的時候使用全類名。有點類似監聽器的作用。default : null(不建議使用)
- 配置未提交的事務處理
- autoCommitOnClose:連接池在回收數據庫連接時是否自動提交事務。如果為false,則會回滾未提交的事務,如果為true,則會自動提交事務。default : false(不建議使用)
- forceIgnoreUnresolvedTransactions:這個配置強烈不建議為true。default : false(不建議使用)一般來說事務當然由自己關閉了,為什么要讓連接池來處理這種不細心問題呢?
- 配置debug和回收Connection
- unreturnedConnectionTimeout:為0的時候要求所有的Connection在應用程序中必須關閉。如果不為0,則強制在設定的時間到達后回收Connection,所以必須小心設置,保證在回收之前所有數據庫操作都能夠完成。這種限制減少Connection未關閉情況的不是很適用。建議手動關閉。default : 0 單位 s(不建議使用)
- debugUnreturnedConnectionStackTraces:如果為true並且unreturnedConnectionTimeout設為大於0的值,當所有被getConnection出去的連接
unreturnedConnectionTimeout時間到的時候,就會打印出堆棧信息。只能在debug模式下適用,因為打印堆棧信息會減慢getConnection的速度default : false(不建議使用)