准备工作
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并注册。