配置文件
- c3p0-config.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <c3p0-config>
- <!-- This is default config! -->
- <default-config>
- <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>
- <!-- This is my config for mysql -->
- <named-config name="mysql">
- <property name="driverClass">com.mysql.jdbc.Driver</property>
- <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=UTF8</property>
- <property name="user">root</property>
- <property name="password"></property>
- <!-- 初始化连接池中的连接数, 取值应在 minPoolSize 与 maxPoolSize 之间, 默认为 3 -->
- <property name="initialPoolSize">10</property>
- <!-- 最大空闲时间, 60 秒内未使用则连接被丢弃. 若为 0 则永不丢弃. 默认值: 0 -->
- <property name="maxIdleTime">30</property>
- <!-- 连接池中保留的最大连接数. 默认值: 15 -->
- <property name="maxPoolSize">100</property>
- <!-- 连接池中保留的最小连接数, 默认为: 3 -->
- <property name="minPoolSize">10</property>
- <!--c3p0 全局的 PreparedStatements 缓存的大小. 如果 maxStatements 与 maxStatementsPerConnection 均为 0, 则缓存不生效, 只要有一个不为 0, 则语句的缓存就能生效. 如果默认值: 0 -->
- <property name="maxStatements">200</property>
- <!-- 当连接池连接耗尽时, 客户端调用 getConnection() 后等待获取新连接的时间, 超时后将抛出 SQLException, 如设为 0 则无限期等待. 单位毫秒. 默认: 0 -->
- <property
- name="checkoutTimeout"
- value="3000" />
- <!-- 当连接池中的连接耗尽的时候 c3p0 一次同时获取的连接数. 默认值: 3 -->
- <property
- name="acquireIncrement"
- value="2" />
- <!-- 定义在从数据库获取新连接失败后重复尝试的次数. 默认值: 30 ; 小于等于 0 表示无限次 -->
- <property
- name="acquireRetryAttempts"
- value="0" />
- <!-- 重新尝试的时间间隔, 默认为: 1000 毫秒 -->
- <property
- name="acquireRetryDelay"
- value="1000" />
- <!-- 关闭连接时, 是否提交未提交的事务, 默认为 false, 即关闭连接, 回滚未提交的事务 -->
- <property name="autoCommitOnClose">false</property>
- <!--c3p0 将建一张名为 Test 的空表, 并使用其自带的查询语句进行测试. 如果定义了这个参数那么属性 preferredTestQuery 将被忽略. 你不能在这张 Test 表上进行任何操作, 它将只供 c3p0 测试使用. 默认值: null -->
- <property name="automaticTestTable">Test</property>
- <!-- 如果为 false, 则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常, 但是数据源仍有效保留, 并在下次调用 getConnection() 的时候继续尝试获取连接. 如果设为 true, 那么在尝试获取连接失败后该数据源将申明已断开并永久关闭. 默认: false -->
- <property name="breakAfterAcquireFailure">false</property>
- <!-- 每 60 秒检查所有连接池中的空闲连接. 默认值: 0, 不检查 -->
- <property name="idleConnectionTestPeriod">60</property>
- <!--maxStatementsPerConnection 定义了连接池内单个连接所拥有的最大缓存 statements 数. 默认值: 0 -->
- <property name="maxStatementsPerConnection"></property>
- </named-config>
- <!-- This is my config for oracle -->
- <named-config name="oracle">
- <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
- <property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>
- <property name="user">scott</property>
- <property name="password">liang</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>
- </named-config>
- </c3p0-config>
连接池工具
- package fun.ehe.www.other;
- import java.sql.Connection;
- import java.sql.SQLException;
- import javax.sql.DataSource;
- import com.mchange.v2.c3p0.ComboPooledDataSource;
- public class JDBCUtil {
- private static DataSource dataSource = null;
- static {
- dataSource = new ComboPooledDataSource("mysql");
- }
- /**
- * 获取数据库连接
- * @return
- */
- public static Connection getConnection() {
- Connection conn = null;
- try {
- conn = dataSource.getConnection();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return conn;
- }
- /**
- * 关闭数据库连接
- * @param conn
- */
- public static void closeConn(Connection conn) {
- try {
- if (conn != null && conn.isClosed()) {
- conn.close();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
注意, 连接使用完毕后, 应该将该连接还给 datasource, 也就是关闭该连接, 否则连接池将会很容易耗尽
来源: http://www.bubuko.com/infodetail-2659980.html