1.
package com.csdn.uil;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.Properties;
import javax.sql.DataSource;
/**
* , dbcp、c3p0 ; DataSourc
*/
public class DBPool implements DataSource {
private static String driver;
private static String url;
private static String username;
private static String password;
private static Connection con;
// LinkedList ,
private static LinkedList<Connection> list = new LinkedList<Connection>();
static {
InputStream in = DBManager.class.getClassLoader().getResourceAsStream(
"db.properties");
Properties pro = new Properties();
try {
pro.load(in);
driver = pro.getProperty("driver");
url = pro.getProperty("url");
username = pro.getProperty("username");
password = pro.getProperty("password");
Class.forName(driver);
// 10
for (int i = 0; i < 10; i++) {
con = DriverManager.getConnection(url, username, password);
System.out.println(" " + con);
list.add(con);
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public Connection getConnection() throws SQLException {
if(list.size()>0){
// get , ( ), get
final Connection con = list.removeFirst();
System.out.println(" :"+con);
System.out.println(" :"+list.size());
return (Connection)Proxy.newProxyInstance(DBPool.class.getClassLoader(), new Class[]{Connection.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if(!method.getName().equalsIgnoreCase("close")){
return method.invoke(con, args);
}
System.out.println(con+" ");
list.add(con);
System.out.println(" :"+list.size());
return null;
}
});
}else{
//throw new RuntimeException(" , !");
return null;
}
}
@Override
public Connection getConnection(String username, String password)
throws SQLException {
return null;
}
@Override
public PrintWriter getLogWriter() throws SQLException {
return null;
}
@Override
public int getLoginTimeout() throws SQLException {
return 0;
}
@Override
public void setLogWriter(PrintWriter out) throws SQLException {
}
@Override
public void setLoginTimeout(int seconds) throws SQLException {
}
@Override
public boolean isWrapperFor(Class<?> iface) throws SQLException {
return false;
}
@Override
public <T> T unwrap(Class<T> iface) throws SQLException {
return null;
}
}
2.Apache :dbcp
package com.csdn.uil;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
public class DBManager_dbcp {
private static DataSource ds;
static{
InputStream in = DBManager_dbcp.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
Properties pro = new Properties();
try {
pro.load(in);
BasicDataSourceFactory factory = new BasicDataSourceFactory();
ds = factory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException{
return ds.getConnection();
}
}
3. c3p0
package com.csdn.uil;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DBManager_c3p0 {
private static ComboPooledDataSource ds = null;
static{
// :xml c3p0-config.xml, doc , , ,
ds = new ComboPooledDataSource("mysql");
/*try {
ds =new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
// com.mysql.jdbc jdbc:mysql: , driver
ds.setJdbcUrl("jdbc:mysql://localhost:3306/login");
ds.setUser("root");
ds.setPassword("root");
ds.setInitialPoolSize(10);
ds.setMaxPoolSize(20);
ds.setMinPoolSize(5);
} catch (PropertyVetoException e) {
e.printStackTrace();
}*/
}
public static Connection getCon() throws SQLException{
return ds.getConnection();
}
}
:c3p0 xml c3p0-config.xml; , c3p0-config, ,
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/login</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
<named-config name="mysql">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/login</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">50</property>
<property name="maxPoolSize">1000</property>
</named-config>
</c3p0-config>