自定义连接池(方法增强)
需要
自定义连接池中存在严重问题,用户调用getConnection()获得连接后,必须使用release(),方法进行连接的归还,如果用户调用conn.close(),将连接真正的释放,连接池中将出现无连接可用。
此时我们希望,即使用户调用了clos()方法,连接仍然归还给连接池。
close()方法
原有功能:释放资源;
期望功能:将当前连接归还给连接池。
说明close()没有我们希望的功能,我们将对close()方法进行增强,从而实现将连接归还给连接池的功能
//1.创建一个容器用于存储Connection对象
private static LinkedList<Connection> pool = new LinkedList<Connection>();
//2.初始化5个连接到容器中
static int InitSize = 5;
static {
for(int i = 0; i < InitSize; i++) {
Connection conn = JDBCUtils_V3.getConnection();
//放入池子中的Connection对象(已经经过改造
MyConnection myConnection = new MyConnection(conn, pool);
pool.add(myConnection);
}
}
/**
* 重写获取连接的方法
*/
@Override
public Connection getConnection() throws SQLException {
Connection conn = null;
//3.使用前先判断
if(pool.size() == 0) {
//4.池子为空,则创建
for(int i = 0; i < 5; i++) {
conn = JDBCUtils_V3.getConnection();
//放入池子中的Connection对象(已经经过改造
MyConnection myConnection = new MyConnection(conn, pool);
pool.add(myConnection);
}
}
//5.从池子中获取一个连接对象Connection
conn = pool.remove(0);
return conn;
}
/**
* 归还连接对象到连接中去
*/
public void backConnection(Connection conn) {
pool.add(conn);
}