c3p0鏈接池初步使用:直接上代碼 1、在使用鏈接池的時候,需要加入如下依賴 2、鏈接池的配置c3p0-config.xml文件如下,需要載入到classpath環境下 3、代碼及測試 4、關於c3p0的其他參數配置,可以參照如下: ...
c3p0鏈接池初步使用:直接上代碼
1、在使用鏈接池的時候,需要加入如下依賴
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency>
2、鏈接池的配置c3p0-config.xml文件如下,需要載入到classpath環境下
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://192.168.47.151:3306/struts</property> <property name="user">root</property> <property name="password">root</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> <property name="maxStatements">200</property> </default-config> <name-config name="mysql"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://192.168.47.151:3306/struts</property> <property name="user">root</property> <property name="password">root</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> <property name="maxStatements">200</property> </name-config> </c3p0-config>
3、代碼及測試
package com.rookie.bigdata.c3p0; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class DBUtil { //根據名稱獲取連接池對象 private static DataSource dataSource = new ComboPooledDataSource("mysql"); //使用預設配置獲取連接池對象 // private static DataSource dataSource = new ComboPooledDataSource(); public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } public static void releaseConnection(Connection connection) { try { if (connection != null) { connection.close(); } } catch (Exception e) { e.printStackTrace(); } } }
public class DBUtilTest { @Test public void getConnection() throws Exception { Connection connection = DBUtil.getConnection(); System.out.println(connection); } }
4、關於c3p0的其他參數配置,可以參照如下:
<!--acquireIncrement:鏈接用完了自動增量3個。 --> <property name="acquireIncrement">3</property> <!--acquireRetryAttempts:鏈接失敗後重新試30次。--> <property name="acquireRetryAttempts">30</property> <!--acquireRetryDelay;兩次連接中間隔1000毫秒。 --> <property name="acquireRetryDelay">1000</property> <!--autoCommitOnClose:連接關閉時預設將所有未提交的操作回滾。 --> <property name="autoCommitOnClose">false</property> <!--automaticTestTable:c3p0測試表,沒什麼用。--> <property name="automaticTestTable">Test</property> <!--breakAfterAcquireFailure:出錯時不把正在提交的數據拋棄。--> <property name="breakAfterAcquireFailure">false</property> <!--checkoutTimeout:100毫秒後如果sql數據沒有執行完將會報錯,如果設置成0,那麼將會無限的等待。 --> <property name="checkoutTimeout">100</property> <!--connectionTesterClassName:通過實現ConnectionTester或QueryConnectionTester的類來測試連接。類名需制定全路徑。Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester--> <property name="connectionTesterClassName"></property> <!--factoryClassLocation:指定c3p0 libraries的路徑,如果(通常都是這樣)在本地即可獲得那麼無需設置,預設null即可。--> <property name="factoryClassLocation">null</property> <!--forceIgnoreUnresolvedTransactions:作者強烈建議不使用的一個屬性。--> <property name="forceIgnoreUnresolvedTransactions">false</property> <!--idleConnectionTestPeriod:每60秒檢查所有連接池中的空閑連接。--> <property name="idleConnectionTestPeriod">60</property> <!--initialPoolSize:初始化時獲取三個連接,取值應在minPoolSize與maxPoolSize之間。 --> <property name="initialPoolSize">3</property> <!--maxIdleTime:最大空閑時間,60秒內未使用則連接被丟棄。若為0則永不丟棄。--> <property name="maxIdleTime">60</property> <!--maxPoolSize:連接池中保留的最大連接數。 --> <property name="maxPoolSize">15</property> <!--maxStatements:最大鏈接數。--> <property name="maxStatements">100</property> <!--maxStatementsPerConnection:定義了連接池內單個連接所擁有的最大緩存statements數。Default: 0 --> <property name="maxStatementsPerConnection"></property> <!--numHelperThreads:非同步操作,提升性能通過多線程實現多個操作同時被執行。Default: 3--> <property name="numHelperThreads">3</property> <!--overrideDefaultUser:當用戶調用getConnection()時使root用戶成為去獲取連接的用戶。主要用於連接池連接非c3p0的數據源時。Default: null--> <property name="overrideDefaultUser">root</property> <!--overrideDefaultPassword:與overrideDefaultUser參數對應使用的一個參數。Default: null--> <property name="overrideDefaultPassword">password</property> <!--password:密碼。Default: null--> <property name="password"></property> <!--preferredTestQuery:定義所有連接測試都執行的測試語句。在使用連接測試的情況下這個一顯著提高測試速度。註意: 測試的表必須在初始數據源的時候就存在。Default: null--> <property name="preferredTestQuery">select id from test where id=1</property> <!--propertyCycle:用戶修改系統配置參數執行前最多等待300秒。Default: 300 --> <property name="propertyCycle">300</property> <!--testConnectionOnCheckout:因性能消耗大請只在需要的時候使用它。Default: false --> <property name="testConnectionOnCheckout">false</property> <!--testConnectionOnCheckin:如果設為true那麼在取得連接的同時將校驗連接的有效性。Default: false --> <property name="testConnectionOnCheckin">true</property> <!--user:用戶名。Default: null--> <property name="user">root</property> <!--usesTraditionalReflectiveProxies:動態反射代理。Default: false--> <property name="usesTraditionalReflectiveProxies">false</property>