c3p0源码解析

来源:互联网 发布:转运中国 知乎 编辑:程序博客网 时间:2024/06/16 12:50

准备工作

1. 导入c3p0 和 mchang-commons-java(依赖其中方法)

2. src/c3p0.properties

c3p0.jdbcUrl=jdbc:mysql://localhost:3307/test  c3p0.driverClass=com.mysql.jdbc.Driver  c3p0.user=root  c3p0.password=root    c3p0.acquireIncrement=3   c3p0.idleConnectionTestPeriod=60      c3p0.initialPoolSize=10   c3p0.maxIdleTime=60   c3p0.maxPoolSize=20   c3p0.maxStatements=100    c3p0.minPoolSize=5 
3. 写个测试类

import java.sql.Connection;import java.sql.SQLException;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;public class C3P0Test {public static void main(String[] args) {// TODO Auto-generated method stubDataSource ds = new ComboPooledDataSource();try {Connection conn = ds.getConnection();System.out.println("get connected!");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
4. 由入口ComboPooledDataSource类开始

    public ComboPooledDataSource()    { this( true ); }    public ComboPooledDataSource( boolean autoregister )    {        super( autoregister );        // System.err.println("...Initializing ComboPooledDataSource.");        dmds  = new DriverManagerDataSource();        wcpds = new WrapperConnectionPoolDataSource();        wcpds.setNestedDataSource( dmds );        try        { this.setConnectionPoolDataSource( wcpds ); }        catch (PropertyVetoException e)        {            logger.log(MLevel.WARNING, "Hunh??? This can't happen. We haven't set up any listeners to veto the property change yet!", e);            throw new RuntimeException("Hunh??? This can't happen. We haven't set up any listeners to veto the property change yet! " + e);        }        // set things up in case there are future changes to our ConnectionPoolDataSource        //        setUpPropertyEvents();    }
由此可知,实际调用的构造器。

4.1 调用父类 AbstractPoolBackedDataSource

    protected AbstractPoolBackedDataSource( boolean autoregister )    {        super( autoregister );        setUpPropertyEvents();    }
调用父类,并设置属性事件setUpPropertyEvents();
4.2 调用父类 PoolBackedDataSourceBase
public PoolBackedDataSourceBase( boolean autoregister ){if (autoregister){this.identityToken = C3P0ImplUtils.allocateIdentityToken( this );C3P0Registry.reregister( this );}}
获取当前对象token并注册。






0 0