c3p0

c3p0

C3P0是一個開源的JDBC連線池,它實現了數據源和JNDI綁定,支持JDBC3規範和JDBC2的標準擴展。目前使用它的開源項目有Hibernate,Spring等。

基本介紹

  • 外文名:c3p0
  • 類別:開源的JDBC連線池
  • 實現了:數據源和JNDI綁定
  • 支持:JDBC3規範和JDBC2的標準擴展
區別介紹,相關信息,配置信息,

區別介紹

c3p0與dbcp區別
dbcp沒有自動回收空閒連線的功能
c3p0有自動回收空閒連線功能

相關信息

連線池配置(以Hibernate為例)
############################## 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>

配置信息

<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則無限期等待。單位毫秒。Default: 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>

相關詞條

熱門詞條

聯絡我們