- 数据库连接池的基本思想,是在系统初始化时将数据库连接作为对象存储在内存中
- 当需要用到数据库连接时,从池中取出连接而非新建,使用完后放回池中而非立刻关闭
- 连接的建立、关闭由连接池管理,可以通过连接池自身的管理机制来监视数据库连接的数量、使用情况等。
- 数据库连接池的一些参数:
- 初始连接数
- 连接数的上下限
- 连接的最大使用次数
- 最大空闲时间
- …
自定义连接池
自定义数据库连接池应该具备的基本属性和方法
import java.sql.Connection;
import java.sql.SQLException;
import java.util.LinkedList;
public class MyPool {
static LinkedList<Connection> pool = new LinkedList<>();
static {
for (int i = 0; i < 10; i++) {
Connection connection = new JDCBUtils.newInstance().getConnection();
pool.add(connection);
}
}
/**
* 从池子中取出连接
* @return
*/
public Connection getConnection(){
if (pool.isEmpty()) {
Connection connection = new JDCBUtils.newInstance().getConnection();
pool.add(connection);
}
Connection connection = pool.removeFirst();
return connection;
}
/**
* 将连接保存到池子里
* @param connection
*/
public void addBack(Connection connection){
if (pool.size() > 10) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
} else {
pool.addLast(connection);
}
}
/**
* 返回连接池的数量
* @return
*/
public int getSize(){
return pool.size();
}
/**
*其它方法
*/
}
Java规范实现连接池
需要用到DataSource接口,但DateSource接口没有提供回收连接的方法,对Connection接口进行装饰,重写里面的close方法可以解决该问题
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
public class MyConnection implements Connection {
private Connection connection;
private LinkedList<Connection> pool;
public MyConnecti