一、概述
核心思想:连接复用,通过建立一个数据库连接池以及一套连接使用、分配、管理策略,使得该连接池中的链接可以得到高效、安全的复用,避免数据库连接的频繁建立、关闭的开销。
组成部分:建立、管理、关闭
自己维护一些数据库连接,需要使用的时候直接使用其中一个连接,用完之后不是关闭而是将其归还,等待其他操作使用。
常见技术:proxool/DBCP/C3P0三种常见的连接池技术
Proxool是一种Java数据库连接池技术。sourceforge下的一个开源项目,这个项目提供一个健壮、已用的连接池,最为关键的是这个连接池提供监控的功能,方便已用,便于发现连接泄漏的情况。
二、Java实现数据库连接池
DBPool数据库连接池Bean
public class DBPool {
private String poolPath;//数据库连接池的配置文件路径
private DBPool() {
}
/**
* @return
* @Author:lulei
* @Description: 返回DBPool对象
*/
public static DBPool getDBPool() {
return DBPoolDao.dbPool;
}
/**
*@Description: 静态内部类实现单例模式
*@Author:lulei
*@Version:1.1.0
*/
private static class DBPoolDao{
private static DBPool dbPool = new DBPool();
}
public String getPoolPath() {
if (poolPath == null) {
//如果poolPath为空,赋值为默认值
poolPath = ClassUtil.getClassRootPath(DBPool.class) + "proxool.xml";
}
return poolPath;
}
/**
* @param poolPath
* @Author:lulei
* @Description: 设置数据库连接池的配置文件路径
*/
public void setPoolPath(String poolPath) {
this.poolPath = poolPath;
}
}
public static String getClassRootPath(Class<?> c) {
return c.getResource("/").getPath().replaceAll("%20", " ");
}
数据库管理类:
public class DBManager {
private DBManager(){
try {
//数据库连接池配置文件
JAXPConfigurator.configure(DBPool.getDBPool().getPoolPath(), false);
//数据库加载驱动类
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @param poolName
* @return
* @throws SQLException
* @Author:lulei
* @Description: 获取数据库连接
*/
public Connection getConnection(String poolName) throws SQLException {
return DriverManager.getConnection(poolName);
}
/**
*@Description: 内部静态类实现单例模式
*@Author:lulei
*@Version:1.1.0
*/
private static class DBManagerDao {