首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

关于c3p0连接池的单例有关问题

2012-08-03 
关于c3p0连接池的单例问题c3p0是一个高效稳定的连接池框架,它一次性创建maxPoolSize条连接供程序调用。现请

关于c3p0连接池的单例问题
c3p0是一个高效稳定的连接池框架,它一次性创建maxPoolSize条连接供程序调用。现请教两个问题:
1、假如项目里共new了20个ComboPooledDataSource对象,那么DBMS里是1×maxPoolSize条连接还是20×maxPoolSize条连接?
2、默认的c3p0.properties文件改成其它文件名(例如db.properties),框架如何获取配置信息?

[解决办法]
1、是20 * maxPoolSize
2、如果用spring,可以采用变量绑定的方式,让spring来管理配置文件和c3p0的构造
[解决办法]
ComboPooledDataSource是不是提供了Propertie为参数的构造方法?这样的话就可以自定义配置文件了


另外,最近搞的很火的BoneCP连接池听说是目前效率最高的哦
[解决办法]
1、假如项目里共new了20个ComboPooledDataSource对象,那么DBMS里是1×maxPoolSize条连接还是20×maxPoolSize条连接?

你最好不要这样使用!创建一个就够了。
[解决办法]
1、不要new那么多啊,只new一个就行了。
2、不管那名字改成什么,都是一样获取的。
给个代码给你看下吧,我现在一直在用的

Java code
public final class ConnectManager{    private static ConnectManager connect = null;    private ComboPooledDataSource ds = null;    private final ReentrantLock lock;    private ConnectManager() {        lock = new ReentrantLock();        ds = new ComboPooledDataSource();        try {            ds.setDriverClass(GetProperInfo.getProperName(DRIVERCLASS));        } catch (PropertyVetoException e) {            e.printStackTrace();        }        ds.setJdbcUrl(GetProperInfo.getProperName(JDBC_URL));        ds.setUser(GetProperInfo.getProperName(JDBC_USER));        ds.setPassword(GetProperInfo.getProperName(JDBC_PASSWORD));        ds.setIdleConnectionTestPeriod(GetProperInfo                .getIntProper(CONNECTIONTESTPERIOD)); // <!--每60秒检查所有连接池中的空闲连接。Default:        // 0 -->        ds.setInitialPoolSize(GetProperInfo.getIntProper(INITIALPOOLSIZE)); // <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default:        // 3        // -->        ds.setMaxIdleTime(GetProperInfo.getIntProper(MAXIDLETIME));// <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default:        // 0 -->        ds.setMaxPoolSize(GetProperInfo.getIntProper(MAXPOOLSIZE));// !--连接池中保留的最大连接数。Default:        // 15 -->        System.out.println("database info:");        System.out                .println("driver=" + GetProperInfo.getProperName(DRIVERCLASS));        System.out.println("url=" + GetProperInfo.getProperName(JDBC_URL));    }    public static synchronized ConnectManager getInstance() {        if (connect == null) {            connect = new ConnectManager();        }        return connect;    }    public final Connection getConn() throws SQLException {        final ReentrantLock lock = this.lock;        lock.lock();        try {            return ds.getConnection();        } finally {            lock.unlock();        }    }    @Override    protected void finalize() throws Throwable {        DataSources.destroy(ds); // 关闭datasource        super.finalize();    }}
[解决办法]
2)我来回答一下。
一般C3P0不会单独使用的,而在Spring中配置,所以没事,不需要知道配置文件叫什么名字。
XML code
<context:property-placeholder location="classpath:c3p0_2.properties" /><bean id="dataSource"      class="com.mchange.v2.c3p0.ComboPooledDataSource"      destroy-method="close">      <property name="driverClass" value="${jdbc.driverClass}" />      <property name="jdbcUrl" value="${jdbc.url}" />      <property name="user" value="${jdbc.username}" />      <property name="password" value="${jdbc.password}" />      <property name="minPoolSize" value="${c3p0.minPoolSize}" />      <property name="maxPoolSize" value="${c3p0.maxPoolSize}" />      <property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>  </bean> 

热点排行