手写连接池的类主要是针对DataSource接口中的getConnection()方法的重写以及回收connection对象,此处没有使用jdbc连接数据库中直接close()关闭connection对象。
手写连接池的步骤如下:
//1.创建1个容器用于存储Connection对象,LinkedList更方便执行插入删除操作
private static LinkedList<Connection> pool = new LinkedList<Connection>();
//2.初始化5个连接放到容器中去,相当于c3p0中的initialPoolSize配置
static{
for (int i = 0; i < 5; i++) {
//JDBCUtils是手写的jdbc工具类,主要是创建connection对象作用
Connection conn = JDBCUtils.getConnection();
pool.add(myconn);
}
}
/**
* 重写获取连接的方法
*/
@Override
public Connection getConnection() throws SQLException {
Connection conn = null;
//3.使用前先判断数据池(pool)中有没有连接
if(pool.size()==0){
//4.池子里面没有连接,新创建一些连接
for (int i = 0; i < 5; i++) {
conn = JDBCUtils_V3.getConnection();
pool.add(myconn);
}
}
//5.从池子里面获取一个连接对象Connection
conn = pool.remove(0);
return conn;
}
/**
* 释放连接回连接池
* 注意:若想依旧通过close()方法来释放连接,就要对Connection 接口中
* 的close()方法进行增强。(Java中对方法增强的几种方式:
* https://www.cnblogs.com/Mr-bao/p/7555016.html)
*
*/
public void backConnection(Connection conn){
pool.add(conn);
}