常用的連接池技術包括:DBCP | C3P0,都是十分成熟穩(wěn)定的連接池技術蚕甥。本文目的是通過一個自定義的連接池來模仿連接池的實現(xiàn)。
該自定義連接池實現(xiàn)思路:
- 1.實現(xiàn)java.sql.Connection 的部分方法耗帕,并對傳入的連接對象進行包裝另玖;
- 2 使用LinkedList來模擬一個連接池,該連接池實例化的時候會創(chuàng)建3個連接恰矩,如果連接不夠用记盒,會自增2個,當連接使用完成則調(diào)用close方法放回;
詳細代碼如下:
實現(xiàn)java.sql.Connection接口外傅,實現(xiàn)的部分如下:
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;
}
}