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<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;

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文包括传统JDBC的缺点连接池原理自定义连接池开源数据库连接池DBCP连接池C3P0连接池Tomcat内置连接池...
    廖少少阅读 16,816评论 0 37
  • 一、事务 事务就是一个事情,组成这个事情可能有多个单元,要求这些单元,要么全都成功,要么全都不成功。在开发中,有事...
    野狗子嗷嗷嗷阅读 2,816评论 0 6
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • 主要内容: 事务 使用数据库连接池优化程序性能 一、事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要...
    yjaal阅读 457评论 3 4
  • 寒霜正满枝,冰河碎泠泠。 小桥西北立,倒影若浮空。 柳叶溅花浪,与君离别生。 红尘渐远,墨染倾城。
    茱枽阅读 345评论 0 6