C3P0数据库连接池【JAVA】-oracle数据库为例

java项目中数据库的连接池选用了C3P0,个人感觉还是挺好用的,目前没有发现什么问题,主要是配置上的结合,今天总结一下如何使用及通用配置解析。

1.第三方jar 我使用的是 c3p0-0.9.2-pre4.jar

2. 刚开始使用这个的时候,由于项目比较紧张,我采用的是set方式来进行配置,其实后来一了解,繁琐了很多,当初的方式如下:

//数据库连接池 使用C3P0数据库连接池
private static ComboPooledDataSource _ds = new ComboPooledDataSource();
	
/** 
 * 数据库连接池初始化 
*/  
static {  
    try {     	
        DbEntity db = ConfigCenter.GetDbEntity();   //DbEntity存储数据库连接中的各种信息
        _ds.setJdbcUrl(db.get_url());  
        _ds.setUser(db.get_username());  
        _ds.setPassword(db.get_password()); 
        _ds.setMaxStatements(0);   
        //TODO 连接池各种优化配置 按需添加
        _ds.setDriverClass(db.get_driver());
        } catch (PropertyVetoException e) {
            ...
        }          
} 
	
/**
* 获取数据库连接
* @return
*/
private static Connection getConnection() {  
    Connection conn = null;  
    try {  
        conn = _ds.getConnection();  
    } catch (Exception e) {  
        ...
    }  
    return conn;  
}  
3. 上面这种配置连接池的方法是最繁琐的,之后我使用了配置文件配置,将配置文件c3p0-config.xml放在类加载路径下或自己定义的目录下,我个人喜欢将配置文件放入我指定的目录下,故我使用此种方式进行指定:

//加载c3p0连接池配置
System.setProperty("com.mchange.v2.c3p0.cfg.xml","configs/c3p0-config.xml");
4. 我之所以没有采用property文件,是因为我要用到多个数据库源,我的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <named-config name="data1">
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
        <property name="jdbcUrl">jdbc:oracle:oci8:@dataname</property>
        <!-- 连接池初始化时建立的连接数 默认值是3 -->
        <property name="initialPoolSize">3</property>
        <!-- 连接的最大空闲时间  单位秒 默认是0-代表永远不会断开连接  超过设定时间的空闲连接将会断开 -->
        <property name="maxIdleTime">30</property>
        <!-- 连接池中拥有的最大连接数 默认值为15个 -->
        <property name="maxPoolSize">20</property>
        <!-- 连接池中保持的最小连接数  默认值为3个-->
        <property name="minPoolSize">3</property>
        <!-- 将连接池的连接数保持在minpoolsize 必须小于maxIdleTime设置  默认值为0代表不处理  单位秒 -->
        <property name="maxIdleTimeExcessConnections">15</property>
    </named-config>	
</c3p0-config>
XML配置文件 可以为多个数据源服务,提供default-config和named-config两种配置方式,如果你只用一个数据源,大可使用default-config配置,与named-config的却别是初始化的时候无参 or有参,default-config配置如下

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
        <property name="jdbcUrl">jdbc:oracle:oci8:@dataname</property>
        <!-- 连接池初始化时建立的连接数 默认值是3 -->
        <property name="initialPoolSize">3</property>
        <!-- 连接的最大空闲时间  单位秒 默认是0-代表永远不会断开连接  超过设定时间的空闲连接将会断开 -->
        <property name="maxIdleTime">30</property>
        <!-- 连接池中拥有的最大连接数 默认值为15个 -->
        <property name="maxPoolSize">20</property>
        <!-- 连接池中保持的最小连接数  默认值为3个-->
        <property name="minPoolSize">3</property>
        <!-- 将连接池的连接数保持在minpoolsize 必须小于maxIdleTime设置  默认值为0代表不处理  单位秒 -->
        <property name="maxIdleTimeExcessConnections">15</property>	
    </default-config>
</c3p0-config>

5.前序工作都做完了,现在该看看我们如何初始化了

//数据库连接池 使用C3P0数据库连接池 使用named-config模式 则通过有参构造函数初始化  带上name
private static ComboPooledDataSource _ds = new ComboPooledDataSource("data1");
//采用default-config模式  则使用无参构造函数即可
//private static ComboPooledDataSource _ds = new ComboPooledDataSource();
	
/**
 * 获取数据库连接
 * @return
 */
private static Connection getConnection() {  
    Connection conn = null;  
    try {  
        conn = _ds.getConnection();  
    } catch (Exception e) {  
        ...
    }  
    return conn;  
}

   通过简单的配置即可实现多数据源的数据库连接池,在一个C3P0-config.xml配置文件中可以既有default-config 又有named-config,只是初始化的时候指明即可(无参 or 有参)

   突然想到,既然总结了oracle数据库连接池的初始化,下一次把对各种语句or存储过程or函数的执行调度也总结下吧,敬请期待...


        

 

                
  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值