继上一次为系统增加缓存以后,现在开始为系统增加连接池。
文章安排如下:
- 简要介绍连接池的基本原理
- Java实现简单的连接池
- 配置和使用Tomcat连接池
- 使用dbcp作为连接池
- dbcp与Spring整合
1.基本原理
数据库连接池的基本原理是在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。当程序中需要建立数据库连接时,只需从内存中获取一个数据库连接来用,而不是新建一个数据库连接,在使用完毕后,只需放回内存既可。对于连接的建立和断开都由连接池自己管理。
综上所述,连接池具有如下特点:
- 资源重用:为了避免频繁地创建、释放数据库连接,实现了数据库连接的重用
- 高效的系统响应:数据库连接池在初始化过程中,一般就会创建若干个数据库连接存储在池中备用,所以具有很高的效率
- 统一的连接管理:对于连接数目的创建、断开、管理和关闭等操作都是由数据库连接池统一管理
2.Java实现
数据库连接池ConncetionPool.java
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Vector;
public class ConnectionPool {
private Vector<Connection> pool;
private String url;
private String username;
private String password;
private String driverClassName;
private int poolSize = 1;
private static ConnectionPool _CP = null;
private ConnectionPool()
{
init();
}
private void init()
{
pool = new Vector<Connection>(poolSize);
readConfig();
addConnection();
}
public synchronized void release(Connection conn)
{
pool.add(conn);
}
public synchronized void closePool()
{
for(int i=0;i<pool.size();i++)
{
try {
pool.get(i).close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pool.remove(i);
}
}
public synchronized Connection getConnection()
{
if(pool.size()>0)
{
Connection conn = pool.get(0);
pool.remove(conn);
return conn;
}
else return null;
}
public static ConnectionPool getInstance()
{
if(_CP == null)
_CP = new ConnectionPool();
return _CP;
}
private void addConnection()
{
Connection conn = null;
for(int i=0;i<poolSize;i+