c3p0經過set方法進行配置java
private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); /** * 配置DataSource */ public static void configDataSource(){ try { dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/zhanghanlun"); dataSource.setUser("zhanghanlun"); dataSource.setPassword("123456"); dataSource.setInitialPoolSize(3); dataSource.setMaxPoolSize(10); dataSource.setMinPoolSize(3); dataSource.setAcquireIncrement(3); } catch (PropertyVetoException e) { e.printStackTrace(); } } /** * 獲取Connection鏈接 * @return */ public static Connection getConnection(){ Connection conn = null; try { conn = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; }
c3p0經過c3p0-config.xml文件進行配置
關於經過配置文件進行配置的話,
這邊須要把xml文件方法同src文件夾下,c3p0會掃描文件進行相關的配置。
在Maven依賴中要加入c3p0和mysql-connector-java依賴,版本號必定要寫。
廢話很少說,下面是c3p0-config.xml文件的代碼
mysql
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!-- 默認配置,若是沒有指定則使用這個配置 --> <default-config> <property name="user">zhanghanlun</property> <property name="password">123456</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/zhanghanlun</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="checkoutTimeout">30000</property> <property name="idleConnectionTestPeriod">30</property> <property name="initialPoolSize">3</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">2</property> <property name="maxStatements">200</property> </default-config> <!-- 命名的配置,能夠經過方法調用實現 --> <named-config name="test"> <property name="user">zhanghanlun</property> <property name="password">123456</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/zhanghanlun</property> <property name="driverClass">com.mysql.jdbc.Driver</property> <!-- 若是池中數據鏈接不夠時一次增加多少個 --> <property name="acquireIncrement">5</property> <!-- 初始化數據庫鏈接池時鏈接的數量 --> <property name="initialPoolSize">20</property> <!-- 數據庫鏈接池中的最大的數據庫鏈接數 --> <property name="maxPoolSize">25</property> <!-- 數據庫鏈接池中的最小的數據庫鏈接數 --> <property name="minPoolSize">5</property> </named-config> </c3p0-config>
java代碼對應以下:
sql
//加載名字爲「test」的配置文件 private static ComboPooledDataSource dataSource = new ComboPooledDataSource("test"); /** * 獲取Connection鏈接 * @return */ public static Connection getConnection(){ Connection conn = null; try { conn = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; }
是否是代碼簡潔了不少,因此在咱們一般使用配置文件來建立數據庫的鏈接池。
c3p0經常使用配置參數介紹
在前面的c3p0的相關配置中,咱們看到了c3p0的配置參數,這裏咱們介紹幾個經常使用的c3p0的配置參數
最基礎的參數配置:
driverClass : 數據庫驅動(好比mysql,或者oracle數據庫的驅動)
jdbcUrl: jdbc數據庫鏈接地址(例如jdbc:mysql://localhost:3306/zhanghanlun)
user:數據庫用戶名
password:和數據庫用戶名對應的數據庫密碼
## 基礎的參數配置
參數 默認值 解釋
initialPoolSize 3 鏈接池初始化時建立的鏈接數(介於maxPoolSize和minPoolSize之間)
maxPoolSize 15 鏈接池中擁有的最大鏈接數,若是得到新鏈接時會使鏈接總數超過這個值則不會再獲取新鏈接,而是等待其餘鏈接釋放,因此這個值有可能會設計地很大
minPoolSize 3 鏈接池保持的最小鏈接數,後面的maxIdleTimeExcessConnections跟這個配合使用來減輕鏈接池的負載
acquireIncrement 3 鏈接池在無空閒鏈接可用時一次性建立的新數據庫鏈接數
管理池大小和鏈接時間的配置
參數 默認值 解釋
maxIdleTime 0 鏈接的最大空閒時間,若是超過這個時間,某個數據庫鏈接尚未被使用,則會斷開掉這個鏈接若是爲0,則永遠不會斷開鏈接
maxConnectorAge 0 鏈接的最大絕對年齡,單位是秒,0表示絕對年齡無限大
maxIdleTimeExcessConnection 0 單位秒,爲了減輕鏈接池的負載,當鏈接池通過數據訪問高峯建立了不少鏈接,可是後面鏈接池不須要維護這麼多鏈接,必須小於maxIdleTime.配置不爲0,則將鏈接池的數量保持到minPoolSize
配置鏈接測試
參數 默認值 解釋
automaticTestTable null 若是不爲null,c3p0將生成指定名稱的空表,使用該表來測試鏈接
connectionTesterClassName com.mchange.v2.c3p0.impl.DefaultConnectionTester -經過實現ConnectionTester或QueryConnectionTester的類來測試鏈接。類名需制定全路徑。
idleConnectionTestPeriod 0 每一個幾秒檢查全部鏈接池中的空閒鏈接
preferredTestQuery null 定義全部鏈接測試都執行的測試語句。在使用鏈接測試的狀況下這個一顯著提升測試速度。注意: 測試的表必須在初始數據源的時候就存在
testConnectionOnCheckin false 若是設爲true那麼在取得鏈接的同時將校驗鏈接的有效性
testConnectionOnCheckout false 若是爲true,在鏈接釋放的同事將校驗鏈接的有效性。
在這幾個參數中,idleConnectionTestPeriod、testConnectionOnCheckout和testConnectuonOnCheckin控制何時鏈接將被校驗檢測。automaticTestTable、connectionTesterClassName和perferedTestQuery控制鏈接將怎麼樣被檢測。
配置語句池
參數 默認值 解釋
maxStatements 0 JDBC的標準參數,用以控制數據源內加載d的PreparedStatements數量
maxStatementsPerConnection 0 maxStatementsPerConnection定義了鏈接池內單個鏈接所擁有的最大緩存statements數
statementCacheNumDeferredCloseThreads 0 若是大於零,則語句池將延遲物理close()緩存語句直到其父鏈接未被任何客戶端使用,或者在其內部(例如在測試中)由池自己使用。
配置數據庫的中斷恢復
參數 默認值 解釋
acquireRetryAttempts 30 定義在從數據庫獲取新鏈接失敗後重復嘗試的次數
acquireRetryDelay 1000 兩次鏈接間隔時間,單位毫秒
breakAfterAcquireFailure false 獲取鏈接失敗將會引發全部等待鏈接池來獲取鏈接的線程拋出異常。可是數據源仍有效 保留,並在下次調用getConnection()的時候繼續嘗試獲取鏈接。若是設爲true,那麼在嘗試 獲取鏈接失敗後該數據源將申明已斷開並永久關閉
配置未解決的事務處理
參數 默認值 解釋
autoCommitOnClose false 鏈接關閉時默認將全部未提交的操做回滾。若是爲true,則未提交設置爲待提交而不是回滾。
forceIgnoreUnresolvedTransactions false 官方文檔建議這個不要設置爲true
其餘數據源配置
參數 默認值 解釋
checkoutTimeout 0 當鏈接池用完時客戶端調用getConnection()後等待獲取新鏈接的時間,超時後將拋出SQLException,如設爲0則無限期等待。單位毫秒。
factoryClassLocation 0 指定c3p0 libraries的路徑,若是(一般都是這樣)在本地便可得到那麼無需設置,默認null便可
numHelperThreads 3 c3p0是異步操做的,緩慢的JDBC操做經過幫助進程完成。擴展這些操做能夠有效的提高性能經過多線程實現多個操做同時被執行
數據庫