用CP30获取连接的工具类

 
package com.commons;

import java.sql.Connection;

import org.apache.log4j.Logger;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ConnectionManager {
    private static Logger logger = Logger.getLogger(ConnectionManager.class);

    private static ConnectionManager instance;

    private ComboPooledDataSource datasource;

    private ConnectionManager() {
	try {
	    datasource = new ComboPooledDataSource();
	    // 数据源进行各种有效的控制:
	    // 设置驱动
	    datasource.setDriverClass(ToolUtils
		    .getStringProperty("jdbc.driverClass"));
	    // 设置数据库URL
	    datasource.setJdbcUrl(ToolUtils.getStringProperty("jdbc.jdbcUrl"));
	    // 设置用户名
	    datasource.setUser(ToolUtils.getStringProperty("jdbc.user"));
	    // 设置密码
	    datasource
		    .setPassword(ToolUtils.getStringProperty("jdbc.password"));
	    // 当连接池中的连接用完时,C3PO一次性创建新的连接数目;
	    datasource.setAcquireIncrement(1);
	    // 定义在从数据库获取新的连接失败后重复尝试获取的次数,默认为30;
	    datasource.setAcquireRetryAttempts(60);
	    // 两次连接中间隔时间默认为1000毫秒
	    datasource.setAcquireRetryDelay(60000);
	    // 连接关闭时默认将所有未提交的操作回滚 默认为false;
	    datasource.setAutoCommitOnClose(false);
	    // 获取连接失败将会引起所有等待获取连接的线程异常,但是数据源仍有效的保留,并在下次调用
	    // getConnection()的时候继续尝试获取连接.如果设为true,那么尝试获取连接失败后该数据源将申明已经断开并永久关闭.默认为false
	    datasource.setBreakAfterAcquireFailure(false);
	    // 当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出
	    // SQLException,如设为0则无限期等待.单位毫秒,默认为0
	    datasource.setCheckoutTimeout(0);
	    // 隔多少秒检查所有连接池中的空闲连接,默认为0表示不检查;
	    datasource.setIdleConnectionTestPeriod(0);
	    // 初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值.默认为3
	    datasource.setInitialPoolSize(Integer.valueOf(
		    ToolUtils.getStringProperty("jdbc.poolinit")).intValue());
	    // 最大空闲时间,超过空闲时间的连接将被丢弃.为0或负数据则永不丢弃.默认为0;
	    datasource.setMaxIdleTime(0);
	    // 连接池中保留的最大连接数据.默认为2
	    datasource.setMaxPoolSize(Integer.valueOf(
		    ToolUtils.getStringProperty("jdbc.poolmax")).intValue());
	    // JDBC的标准参数,用以控制数据源内加载的PreparedStatement数据.但由于预缓存的
	    // Statement属于单个Connection而不是整个连接池.所以设置这个参数需要考滤到多方面的因素,如果maxStatements
	    // 与maxStatementsPerConnection均为0,则缓存被关闭.默认为0;
	    datasource.setMaxStatements(0);
	    // 连接池内单个连接所拥有的最大缓存被关闭.默认为0;
	    datasource.setMaxStatementsPerConnection(0);
	    // C3P0是异步操作的,缓慢的JDBC操作通过帮助进程完成.扩展这些操作可以有效的提升性能,通过多数程实现多个操作同时被执行.默为为2
	    datasource.setNumHelperThreads(2);
	    // 用户修改系统配置参数执行前最多等待的秒数.默认为300;
	    datasource.setPropertyCycle(300);
	} catch (Exception e) {
	    logger.info("创建c3p0数据源出现异常," + e);
	}
    }

    public static final ConnectionManager getInstance() {
	if (instance == null) {
	    try {
		instance = new ConnectionManager();
	    } catch (Exception e) {
		logger.info("创建c3p0数据源出现异常," + e);
	    }
	}
	return instance;
    }

    public synchronized final Connection getConnection() {
	try {
	    // 获取数据连接
	    return datasource.getConnection();
	} catch (Exception e) {
	    logger.info("无法从数据源获取连接," + e);
	}
	return null;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值