67,513
社区成员
发帖
与我相关
我的任务
分享
//自定义连接池,初始连接数5,最大为10
public class mypool {
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:8078/test";
public static final String USER = "root";
public static final String PASSWORD = "22222";
private LinkedList<Connection> pool=new LinkedList<>();
private int initCount=5;
private int currentCount=0;
private int max=10;
static{
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public mypool(){
for(int i=0;i<initCount;i++){
pool.addLast(createConnection());
currentCount++;
}
}
private Connection createConnection(){
Connection conn=null;
try {
conn= DriverManager.getConnection(URL,USER,PASSWORD);
myConnection mc=new myConnection(conn,this);
return mc;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public Connection getConnetion(){
if(pool.size()>0){ //<5
return pool.removeFirst();
}
if(currentCount<max){ //5-10
currentCount++;
System.out.println(currentCount);
return createConnection();
}
//超过最大连接数
throw new RuntimeException("超过最大连接数");
}
public void closeConnection(Connection c){
pool.addLast(c);
}
public LinkedList<Connection> getPool() {
return pool;
}
}
//这是代理类
public class myConnection implements Connection{
private mypool mo;
private Connection conn; //真实的Connection
//private
public myConnection(Connection c,mypool pool){
conn=c;
mo=pool;
}
/*
* 只重写close()
*/
@Override
public void close() throws SQLException {
System.out.println("关闭");
mo.closeConnection(conn);
}
// @Override
// public String toString() {
// return " conn=" + conn ;
// }
........其它的调用Connection 的方法
}
//测试类
public class test {
public static void main(String[] args) {
mypool mp=new mypool();
for(int i=0;i<6;i++){
Connection conn=mp.getConnetion();
System.out.println(conn);
if(i==3){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}