1. 程式人生 > >C3P0的詳細配置說明(com.mchange.v2.c3p0.ComboPooledDataSource)

C3P0的詳細配置說明(com.mchange.v2.c3p0.ComboPooledDataSource)

C3P0是一個開放原始碼的JDBC連線池,它在lib目錄中與Hibernate一起釋出,包括了實現jdbc3和jdbc2擴充套件規範說明的Connection 和Statement 池的DataSources 物件。

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>

在Hibernate(spring管理)中的配置: 
  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
  <property name="driverClass"><value>oracle.jdbc.driver.OracleDriver</value></property> 
  <property name="jdbcUrl"><value>jdbc:oracle:thin:@localhost:1521:Test</value></property> 
  <property name="user"><value>Kay</value></property> 
  <property name="password"><value>root</value></property> 
  <!--連線池中保留的最小連線數。--> 
  <property name="minPoolSize" value="10" /> 
  <!--連線池中保留的最大連線數。Default: 15 --> 
  <property name="maxPoolSize" value="100" /> 
  <!--最大空閒時間,1800秒內未使用則連線被丟棄。若為0則永不丟棄。Default: 0 --> 
  <property name="maxIdleTime" value="1800" /> 
  <!--當連線池中的連線耗盡的時候c3p0一次同時獲取的連線數。Default: 3 --> 
  <property name="acquireIncrement" value="3" /> 
  <property name="maxStatements" value="1000" /> 
  <property name="initialPoolSize" value="10" /> 
  <!--每60秒檢查所有連線池中的空閒連線。Default: 0 --> 
  <property name="idleConnectionTestPeriod" value="60" /> 
  <!--定義在從資料庫獲取新連線失敗後重復嘗試的次數。Default: 30 --> 
  <property name="acquireRetryAttempts" value="30" /> 
  <property name="breakAfterAcquireFailure" value="true" /> 
  <property name="testConnectionOnCheckout" value="false" /> 
  </bean>

  ###########################
  ### C3P0 Connection Pool###
  ###########################
  #hibernate.c3p0.max_size 2
  #hibernate.c3p0.min_size 2
  #hibernate.c3p0.timeout 5000
  #hibernate.c3p0.max_statements 100
  #hibernate.c3p0.idle_test_period 3000
  #hibernate.c3p0.acquire_increment 2
  #hibernate.c3p0.validate false
  在hibernate.cfg.xml檔案裡面加入如下的配置:
  <!-- 最大連線數 -->
  <property name="hibernate.c3p0.max_size">20</property>

  <!-- 最小連線數 -->
  <property name="hibernate.c3p0.min_size">5</property>

  <!-- 獲得連線的超時時間,如果超過這個時間,會丟擲異常,單位毫秒 -->
  <property name="hibernate.c3p0.timeout">120</property>

  <!-- 最大的PreparedStatement的數量 -->
  <property name="hibernate.c3p0.max_statements">100</property>

  <!-- 每隔120秒檢查連線池裡的空閒連線 ,單位是秒-->
  <property name="hibernate.c3p0.idle_test_period">120</property>

  <!-- 當連線池裡面的連線用完的時候,C3P0一下獲取的新的連線數 -->
  <property name="hibernate.c3p0.acquire_increment">2</property>

  <!-- 每次都驗證連線是否可用 -->
  <property name="hibernate.c3p0.validate">true</property>