美文网首页
2.自定义连接池的实现

2.自定义连接池的实现

作者: Michael_林 | 来源:发表于2017-04-03 19:36 被阅读152次

    常用的连接池技术包括: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<Connection> pool;

    public ConnectionWarp(Connection con){
    this.con = con;
    }
    public ConnectionWarp(Connection con, LinkedList<Connection> 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> T unwrap(Class<T> iface) throws SQLException {

      return con.unwrap(iface);
    

    }
    }

    自定义连接池

    import java.sql.Connection;
    public class MyDataSource {

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

    //初始化连接池,放入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.自定义连接池的实现

          本文链接:https://www.haomeiwen.com/subject/xiuoottx.html