c3p0配置文件詳細說明及其使用

參考

官網:https://www.mchange.com/projects/c3p0/

https://blog.51cto.com/12133802/2418053

配置

我的配置

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="user">root</property>
		<property name="password">1234</property>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql:///kjxn</property>
	</default-config> <!-- This app is massive! -->
</c3p0-config> 

別人的常用配置

c3p0.acquireIncrement=3 
 c3p0.initialPoolSize=3 
 c3p0.idleConnectionTestPeriod=900 
 c3p0.minPoolSize=2 
 c3p0.maxPoolSize=50 
 c3p0.maxStatements=100 
 c3p0.numHelperThreads=10 
 c3p0.maxIdleTime=600

 <property name="acquireIncrement"> 
 <value>${c3p0.acquireIncrement}</value> 
 </property> 
 <property name="initialPoolSize"> 
 <value>${c3p0.initialPoolSize}</value> 
 </property> 
 <property name="minPoolSize"> 
 <value>${c3p0.minPoolSize}</value> 
 </property> 
 <property name="maxPoolSize"> 
 <value>${c3p0.maxPoolSize}</value> 
 </property> 
 <property name="maxIdleTime"> 
 <value>${c3p0.maxIdleTime}</value> 
 </property> 
 <property name="idleConnectionTestPeriod"> 
 <value>${c3p0.idleConnectionTestPeriod}</value> 
 </property> 
 <property name="maxStatements"> 
 <value>${c3p0.maxStatements}</value> 
 </property> 
 <property name="numHelperThreads"> 
 <value>${c3p0.numHelperThreads}</value> 
 </property>

配置說明

<c3p0-config> 
  <default-config> 
  <!--當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數。Default: 3 --> 
  <property name="acquireIncrement">3</property> 

  <!--定義在從數據庫獲取新連接失敗後重復嘗試的次數。Default: 30 --> 
  <property name="acquireRetryAttempts">30</property>

  <!--兩次連接中間隔時間,單位毫秒。Default: 1000 --> 
  <property name="acquireRetryDelay">1000</property> 

  <!--連接關閉時默認將所有未提交的操作回滾。Default: false --> 
  <property name="autoCommitOnClose">false</property> 

  <!--c3p0將建一張名爲Test的空表,並使用其自帶的查詢語句進行測試。如果定義了這個參數那麼 屬性 preferredTestQuery將被忽略。你不能在這張Test表上進行任何操作,它將只供c3p0測試使用。Default: 
null--> 
  <property name="automaticTestTable">Test</property> 

  <!--獲取連接失敗將會引起所有等待連接池來獲取連接的線程拋出異常。但是數據源仍有效 保留,並在下次調用getConnection()
 的時候繼續嘗試獲取連接。如果設爲true,那麼在嘗試獲取連接失敗後該數據源將申明已斷開並永久關閉。Default: false--> 
  <property name="breakAfterAcquireFailure">false</property> 

  <!--當連接池用完時客戶端調用getConnection()後等待獲取新連接的時間,超時後將拋出SQLException,如設爲0則無限期等待。單位毫秒。efault: 0 --> 
  <property name="checkoutTimeout">100</property> 

  <!--通過實現ConnectionTester或QueryConnectionTester的類來測試連接。類名需制定全路徑。Default:com.mchange.v2.c3p0.impl.DefaultConnectionTester--> 
<property name="connectionTesterClassName"></property> 

  <!--指定c3p0 libraries的路徑,如果(通常都是這樣)在本地即可獲得那麼無需設置,默認null即可 Default: null--> 
  <property name="factoryClassLocation">null</property> 

  <!--Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs. 文檔原文)作者強烈建議不使用的一個屬性--> 
  <property name="forceIgnoreUnresolvedTransactions">false</property> 

  <!--每60秒檢查所有連接池中的空閒連接。Default: 0 --> 
  <property name="idleConnectionTestPeriod">60</property> 

  <!--初始化時獲取三個連接,取值應在minPoolSize與maxPoolSize之間。Default: 3 --> 
  <property name="initialPoolSize">3</property> 

  <!--最大空閒時間,60秒內未使用則連接被丟棄。若爲0則永不丟棄。Default: 0 --> 
  <property name="maxIdleTime">60</property> 

  <!--連接池中保留的最大連接數。Default: 15 --> 
  <property name="maxPoolSize">15</property> 

  <!--JDBC的標準參數,用以控制數據源內加載的PreparedStatements數量。但由於預緩存的statements屬於單個
 connection而不是整個連接池。所以設置這個參數需要考慮到多方面的因素。如果maxStatements與 
maxStatementsPerConnection均爲0,則緩存被關閉。Default: 0--> 
  <property name="maxStatements">100</property> 

  <!--maxStatementsPerConnection定義了連接池內單個連接所擁有的最大緩存statements數。Default: 0 --> 
  <property name="maxStatementsPerConnection"></property> 

  <!--c3p0是異步操作的,緩慢的JDBC操作通過幫助進程完成。擴展這些操作可以有效的提升性能 通過多線程實現多個操作同時被執行。Default: 3--> 
  <property name="numHelperThreads">3</property> 

  <!--當用戶調用getConnection()時使root用戶成爲去獲取連接的用戶。主要用於連接池連接非c3p0 的數據源時。Default: null--> 
  <property name="overrideDefaultUser">root</property> 

  <!--與overrideDefaultUser參數對應使用的一個參數。Default: null--> 
  <property name="overrideDefaultPassword">password</property> 

  <!--密碼。Default: null--> 
  <property name="password"></property> 

  <!--定義所有連接測試都執行的測試語句。在使用連接測試的情況下這個一顯著提高測試速度。注意:測試的表必須在初始數據源的時候就存在。Default: null--> 
  <property name="preferredTestQuery">select id from test where id=1</property> 

  <!--用戶修改系統配置參數執行前最多等待300秒。Default: 300 --> 
  <property name="propertyCycle">300</property> 

  <!--因性能消耗大請只在需要的時候使用它。如果設爲true那麼在每個connection提交的 時候都將校驗其有效性。建議使用 
idleConnectionTestPeriod或automaticTestTable 等方法來提升連接測試的性能。Default: false
 --> 
  <property name="testConnectionOnCheckout">false</property> 

  <!--如果設爲true那麼在取得連接的同時將校驗連接的有效性。Default: false --> 
  <property name="testConnectionOnCheckin">true</property> 

  <!--用戶名。Default: null--> 
  <property name="user">root</property>
  </default-config> <!-- This app is massive! -->
</c3p0-config> 

數據庫連接池c3p0常用配置說明及建議

1.最常用配置

initialPoolSize:
連接池初始化時創建的連接數,default : 3(建議使用)

minPoolSize:
連接池保持的最小連接數,default : 3(建議使用)

maxPoolSize:
連接池中擁有的最大連接數,如果獲得新連接時會使連接總數超過這個值則不會再獲取新連接,而是等待其他連接釋放,所以這個值有可能會設計地很大,default : 15(建議使用)

acquireIncrement:
連接池在無空閒連接可用時一次性創建的新數據庫連接數,default : 3(建議使用)

2.管理連接池的大小和連接的生存時間

maxConnectionAge:
配置連接的生存時間,超過這個時間的連接將由連接池自動斷開丟棄掉。當然正在使用的連接不會馬上斷開,而是等待它close再斷開。配置爲0的時候則不會對連接的生存時間進行限制。default : 0 單位 s(不建議使用)

maxIdleTime:
連接的最大空閒時間,如果超過這個時間,某個數據庫連接還沒有被使用,則會斷開掉這個連接。如果爲0,則永遠不會斷開連接,即回收此連接。default : 0 單位 s(建議使用)

maxIdleTimeExcessConnections:
這個配置主要是爲了快速減輕連接池的負載,比如連接池中連接數因爲某次數據訪問高峯導致創建了很多數據連接,但是後面的時間段需要的數據庫連接數很少,需要快速釋放,必須小於maxIdleTime。其實這個沒必要配置,maxIdleTime已經配置了。default : 0 單位 s(不建議使用)

3.配置連接測試:

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(不建議使用)

4.配置PreparedStatement緩存:

maxStatements:
連接池爲數據源緩存的PreparedStatement的總數。由於PreparedStatement屬於單個Connection,所以這個數量應該根據應用中平均連接數乘以每個連接的平均PreparedStatement來計算。同時maxStatementsPerConnection的配置無效。default : 0(不建議使用)

maxStatementsPerConnection:
連接池爲數據源單個Connection緩存的PreparedStatement數,這個配置比maxStatements更有意義,因爲它緩存的服務對象是單個數據連接,如果設置的好,肯定是可以提高性能的。爲0的時候不緩存。default : 0(看情況而論)

5.重連相關配置

acquireRetryAttempts:
連接池在獲得新連接失敗時重試的次數,如果小於等於0則無限重試直至連接獲得成功。default : 30(建議使用)

acquireRetryDelay:
連接池在獲得新連接時的間隔時間。default : 1000 單位ms(建議使用)

breakAfterAcquireFailure:
如果爲true,則當連接獲取失敗時自動關閉數據源,除非重新啓動應用程序。所以一般不用。default : false(不建議使用)

checkoutTimeout:
配置當連接池所有連接用完時應用程序getConnection的等待時間。爲0則無限等待直至有其他連接釋放或者創建新的連接,不爲0則當時間到的時候如果仍沒有獲得連接,則會拋出SQLException。其實就是acquireRetryAttempts*acquireRetryDelay。default : 0(與上面兩個,有重複,選擇其中兩個都行)

6.定製管理Connection的生命週期

connectionCustomizerClassName:
用來定製Connection的管理,比如在Connection acquire 的時候設定Connection的隔離級別,或者在Connection丟棄的時候進行資源關閉,就可以通過繼承一個AbstractConnectionCustomizer來實現相關方法,配置的時候使用全類名。有點類似監聽器的作用。default : null(不建議使用)

7.配置未提交的事務處理

autoCommitOnClose:
連接池在回收數據庫連接時是否自動提交事務。如果爲false,則會回滾未提交的事務,如果爲true,則會自動提交事務。default : false(不建議使用)

forceIgnoreUnresolvedTransactions:
這個配置強烈不建議爲true。default : false(不建議使用)一般來說事務當然由自己關閉了,爲什麼要讓連接池來處理這種不細心問題呢?

8.配置debug和回收Connection

unreturnedConnectionTimeout:
爲0的時候要求所有的Connection在應用程序中必須關閉。如果不爲0,則強制在設定的時間到達後回收Connection,所以必須小心設置,保證在回收之前所有數據庫操作都能夠完成。這種限制減少Connection未關閉情況的不是很適用。建議手動關閉。default : 0 單位 s(不建議使用)

debugUnreturnedConnectionStackTraces:

如果爲true並且unreturnedConnectionTimeout設爲大於0的值,當所有被getConnection出去的連接unreturnedConnectionTimeout時間到的時候,就會打印出堆棧信息。只能在debug模式下適用,因爲打印堆棧信息會減慢getConnection的速度default : false(不建議使用)

原文鏈接:https://blog.csdn.net/caychen/article/details/79625279

使用

配置default

DataSource ds = new ComboPooledDataSource("mySource");
//參數對應使用哪個config,如果不寫,表示使用默認的config,即default-config裏的配置,否則使用參數指定的named-config裏的配置。

配置oracle

通過xml的方式還可以配置其他的,當我們要連接oracle數據庫的時候,配置
named-config name=“oracle”
然後在創建C3p0的數據庫連接池對象時傳構造函數的參數進去,就可以讀到oracle的配置信息了

<!-- 自定義的c3p0-config.xml -->
<?xml version="1.0" encoding="UTF-8"?>
 
<c3p0-config>
  <default-config>   
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property>
    <property name="user">root</property>
    <property name="password">java</property>
 
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
  </default-config>
 
  <named-config name="mySource">
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/bookstore</property>
    <property name="user">root</property>
    <property name="password">xxxx</property>
 
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
  </named-config>
</c3p0-config>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章