c3p0源码解析

准备工作

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 stub
		DataSource ds = new ComboPooledDataSource();
		try {
			Connection conn = ds.getConnection();
			System.out.println("get connected!");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.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并注册。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值