C3P0的三种配置方式以及基本配置项详解

c3p0的配置方式分为三种,分别是
1.setters一个个地设置各个配置项
2.类路径下提供一个c3p0.properties文件
3.类路径下提供一个c3p0-config.xml文件

 

案例1:setters

可以在类路径下提供一个c3p0.properties文件,然后set赋值,也可以直接在代码中进行赋值。

/*
     * 通过setter方式赋值
     */    
    @Test
    public void test01(){
        
        Properties props = new Properties();
        
        InputStream in = JDBCutil.class.getResourceAsStream("/c3p0.properties");
        
        try {
            props.load(in);
            in.close();
            
            ComboPooledDataSource cpds = new ComboPooledDataSource();
            cpds.setDriverClass(props.getProperty("c320.driverClass"));
            cpds.setJdbcUrl(props.getProperty("c3p0.jdbcUrl"));
            cpds.setUser(props.getProperty("c3p0.user"));
            cpds.setPassword(props.getProperty("c3p0.password"));
                       cpds.getConnection();
            
            System.out.println("获取连接成功!");
            
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }  
    

 

2、类路径下提供一个c3p0.properties文件

 

 

public class JDBCutil {
    
    private static ComboPooledDataSource ds = new ComboPooledDataSource();

    /*
     * 通过setter方式赋值
     */    
    @Test
    public void test01(){        
        try {            
            Connection connection = ds.getConnection();
            System.out.println(connection.getCatalog());
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

3.类路径下提供一个c3p0-config.xml文件  
这种方式使用方式与第二种差不多,但是有更多的优点 
(1).更直观明显,很类似hibernate和spring的配置 
(2).可以为多个数据源服务,提供default-config和named-config两种配置方式 

  

<?xml version="1.0" encoding="UTF-8"?>

<!-- 
C3P0的缺省(默认)配置
如果在代码中ComboPooledDataSource ds = new ComboPooledDataSource();
这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源
 -->
 
<c3p0-config>
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/spring3</property>
        <property name="user">root</property>
        <property name="password">88888888a@</property>
        
        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        
        <property name="initialPoolSize">10</property>
        <property name="maxIdleTime">30</property>
        <property name="maxPoolsize">100</property>        
    </default-config>
    
    <named-config name="myApp">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/spring3</property>
        <property name="user">root</property>
        <property name="password">88888888a@</property>
        
        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        
        <property name="initialPoolSize">10</property>
        <property name="maxIdleTime">30</property>
        <property name="maxPoolsize">100</property>        
    </named-config>
</c3p0-config>

 

 

如果要使用default-config则初始化数据源的方式与第二种一样,如果要使用named-config里面配置初始化数据源,则只要使用一个带参数的ComboPooledDataSource构造器就可以了

public class JDBCutil {
    
    private static ComboPooledDataSource ds = new ComboPooledDataSource("myApp");

    @Test
    public void test01(){
        
        try {
            Connection conn = ds.getConnection();
            System.out.println("获取连接成功!"+conn.getCatalog());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 1.基本配置项

acquireIncrement default : 3 连接池在无空闲连接可用时一次性创建的新数据库连接数
initialPoolSize default : 3 连接池初始化时创建的连接数
maxPoolSize default : 15 连接池中拥有的最大连接数,如果获得新连接时会使连接总数超过这个值则不会再获取新连接,而是等待其他连接释放,所以这个值有可能会设计地很大
maxIdleTime default : 0 单位 s 连接池保持的最小连接数,后面的maxIdleTimeExcessConnections跟这个配合使用来减轻连接池的负载

2.管理连接池的大小和连接的生存时间

maxConnectionAge default : 0 单位 s 配置连接的生存时间,超过这个时间的连接将由连接池自动断开丢弃掉。当然正在使用的连接不会马上断开,而是等待它close再断开。配置为0的时候则不会对连接的生存时间进行限制。
maxIdleTimeExcessConnections default : 0 单位 s 这个配置主要是为了减轻连接池的负载,比如连接池中连接数因为某次数据访问高峰导致创建了很多数据连接但是后面的时间段需要的数据库连接数很少,则此时连接池完全没有必要维护那么多的连接,所以有必要将断开丢弃掉一些连接来减轻负载,必须小于maxIdleTime。配置不为0,则会将连接池中的连接数量保持到minPoolSize,为0则不处理
posted @ 2022-05-16 09:11  塞纳纽斯  阅读(1098)  评论(0)    收藏  举报