2.自定义连接池的实现

常用的连接池技术包括:DBCP | C3P0,都是十分成熟稳定的连接池技术。本文目的是通过一个自定义的连接池来模仿连接池的实现。
该自定义连接池实现思路:

  • 1.实现java.sql.Connection 的部分方法,并对传入的连接对象进行包装;
  • 2 使用LinkedList来模拟一个连接池,该连接池实例化的时候会创建3个连接,如果连接不够用,会自增2个,当连接使用完成则调用close方法放回;
    详细代码如下:

实现java.sql.Connection接口,实现的部分如下:

import java.sql.Array;
public class ConnectionWarp implements Connection {
private Connection con;
private LinkedList pool;

public ConnectionWarp(Connection con){
this.con = con;
}
public ConnectionWarp(Connection con, LinkedList pool){
this.con = con;
this.pool = pool;
}
//要加强的方法
@Override
public Statement createStatement() throws SQLException {

  return con.createStatement();

}

@Override
public PreparedStatement prepareStatement(String sql) throws SQLException {

  return con.prepareStatement(sql);

}
@Override
public void close() throws SQLException {
System.out.println("放回连接前:" + pool.size());
pool.addLast(this);
System.out.println("放回连接后;" + pool.size());

  System.out.println("已将连接放回");

}

@Override
public T unwrap(Class iface) throws SQLException {

  return con.unwrap(iface);

}
}

自定义连接池

import java.sql.Connection;
public class MyDataSource {

//1.定义一个连接池
static LinkedList pool = new LinkedList();

//初始化连接池,放入3个连接
static {
for(int i=0; i<3; i++){
Connection con;
try {
con = JdbcUtils.getConnection();
pool.add(con);
} catch (SQLException e) {

          e.printStackTrace();
      }
  }

}

//获取连接
@SuppressWarnings("resource")
public Connection getConnection(){
if(pool.isEmpty()){
for(int i=0; i<2; i++){
Connection con;
try {
con = JdbcUtils.getConnection();
pool.add(con);
} catch (SQLException e) {

              e.printStackTrace();
          }
      }
  }
  Connection conn = pool.remove();
  ConnectionWarp connWarp = new ConnectionWarp(conn, pool);
  return connWarp;

}

}

你可能感兴趣的:(2.自定义连接池的实现)