package exercise;
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.util.LinkedList;
import java.util.Properties;
public class ConnPool {
private String driver;
private String url;
private String username;
private String password;
private int init_count; //初始化中的数量
private int max_count; //最大的数量
private int curr_count; //当前连接的数量
private LinkedList<Connection> mList = new LinkedList<>();
public ConnPool() throws Exception{
for(int i=0;i<init_count;i++){
Connection conn = creatConn();
curr_count++;
mList.add(conn);
}
}
public ConnPool(Properties pro) throws Exception{
this();
this.driver=pro.getProperty("driver");
this.url=pro.getProperty("url");
this.username=pro.getProperty("username");
this.password=pro.getProperty("username");
this.init_count=Integer.parseInt(pro.getProperty("init_count"));
this.max_count=Integer.parseInt(pro.getProperty("max_count"));
}
//
private Connection creatConn() throws Exception{
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
Connection proxy = (Connection) Proxy.newProxyInstance(
conn.getClass().getClassLoader(),
new Class[] {Connection.class},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
Object result = null;
if("close".equals(method.getName())){
if(init_count>mList.size()){
mList.add(conn);
}else{
result= method.invoke(conn, args);
}
}else{
result= method.invoke(conn, args);
}
return result;
}
}
);
return proxy ;
}
public Connection getConnection() throws Exception{
if(mList.size()>0){
return mList.removeFirst();
}
if(curr_count<max_count){
curr_count++;
return creatConn();
}
throw new Exception("达到最大连接数....");
}
}
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.util.LinkedList;
import java.util.Properties;
public class ConnPool {
private String driver;
private String url;
private String username;
private String password;
private int init_count; //初始化中的数量
private int max_count; //最大的数量
private int curr_count; //当前连接的数量
private LinkedList<Connection> mList = new LinkedList<>();
public ConnPool() throws Exception{
for(int i=0;i<init_count;i++){
Connection conn = creatConn();
curr_count++;
mList.add(conn);
}
}
public ConnPool(Properties pro) throws Exception{
this();
this.driver=pro.getProperty("driver");
this.url=pro.getProperty("url");
this.username=pro.getProperty("username");
this.password=pro.getProperty("username");
this.init_count=Integer.parseInt(pro.getProperty("init_count"));
this.max_count=Integer.parseInt(pro.getProperty("max_count"));
}
//
private Connection creatConn() throws Exception{
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
Connection proxy = (Connection) Proxy.newProxyInstance(
conn.getClass().getClassLoader(),
new Class[] {Connection.class},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
Object result = null;
if("close".equals(method.getName())){
if(init_count>mList.size()){
mList.add(conn);
}else{
result= method.invoke(conn, args);
}
}else{
result= method.invoke(conn, args);
}
return result;
}
}
);
return proxy ;
}
public Connection getConnection() throws Exception{
if(mList.size()>0){
return mList.removeFirst();
}
if(curr_count<max_count){
curr_count++;
return creatConn();
}
throw new Exception("达到最大连接数....");
}
}