当前位置: 技术问答>java相关
有谁写过连接池
来源: 互联网 发布时间:2017-03-15
本文导语: 有哪位高手写过连接池?可以在此谈一下心得和技巧吗?最好发布一下代码 :-) | package util.database; import java.sql.*; import java.util.*; /** * ConnectionManager * 数据库连接的管理类,使用连接池。默认的最...
有哪位高手写过连接池?可以在此谈一下心得和技巧吗?最好发布一下代码
:-)
:-)
|
package util.database;
import java.sql.*;
import java.util.*;
/**
* ConnectionManager
* 数据库连接的管理类,使用连接池。默认的最小连接数和最大连接数分别为5,10。
* 如果用户指定的值大于默认值,就采用指定的值
*
* @author Michael Zeng
* @version 1.0 September 18, 2002
*
* @todo: 目前还只能支持一个数据库和一个连接池。因为在构造函数中指定了数据库的
* 各种参数,不是很灵活。下一步采用loadProperty()方法从一个配置文件中直接读取参
* 数,并且考虑支持多个连接池。
*/
public class ConnectionManager
{
private static ConnectionManager instance = null;
private ConnectionPool connPool = null;
private String driver, url, user, passwd;
private int minConn = 5, maxConn = 10;
private final long PERIOD = 20000; //线程等待的时间20秒
private final int TRY_TIMES = 5; //池中没有可用连接时的重试次数
/**
* 得到ConnectionManager的一个唯一实例
*
* @param _driver 数据库驱动程序
* @param _url 数据库的地址
* @param _user 数据库用户名
* @param _passwd 用户密码
* @param _minConn 最小支持的连接数目
* @param _maxConn 最大支持的连接数目
* @return ConnectionManager 唯一实例
*
* @throws Exception
*/
public static ConnectionManager getInstance(String _driver, String _url, String _user,
String _passwd, int _minConn, int _maxConn) throws Exception
{
if(instance == null)
{
instance = new ConnectionManager(_driver, _url, _user, _passwd,
_minConn, _maxConn);
}
return instance;
}
/**
* 从连接池中得到Conncetion的一个实例
*
* @return Connection 连接的实例,出现异常情况时,返回null
*
* @throws Exception
*/
public Connection getConnection() throws Exception
{
return this.connPool.getConnection();
}
/**
* 把一个Connection实例返回连接池,如果已经到了池的最大容量,
* 就把这个连接释放。
*
* @param conn 要返回的Connection
*
* @throws Exception
*/
public void freeConncetion(Connection conn) throws Exception
{
this.connPool.freeConncetion(conn);
}
/**
* 释放连接池中的所有Connection
*
* @throws Exception
*/
public void close()throws Exception
{
this.connPool.release();
}
/**
* 得到连接池的实际大小
*
* @return int 连接池的大小
*/
public int getPoolSize()
{
return this.connPool.getPoolSize();
}
/**
* 私有的构造函数
*
* @param _driver 数据库驱动程序
* @param _url 数据库的地址
* @param _user 数据库用户名
* @param _passwd 用户密码
* @param _minConn 最小支持的连接数目
* @param _maxConn 最大支持的连接数目
* @return ConnectionManager 实例
*
* @throws Exception
*/
private ConnectionManager(String _driver, String _url, String _user,
String _passwd, int _minConn, int _maxConn) throws Exception
{
this.driver = _driver;
this.url = _url;
this.user = _user;
this.passwd = _passwd;
//如果用户指定的值大于默认值,就采用指定的值
this.minConn = Math.max(this.minConn, _minConn);
this.maxConn = Math.max(this.maxConn, _maxConn);
//如果用户指定的min > max,强迫两个值相等
this.minConn = Math.min(this.minConn, this.maxConn);
this.connPool = new ConnectionPool();
}
/**
* ConnectionPool
* inner class
*/
private class ConnectionPool implements Runnable
{
private List pool = null;
private Thread runner = null;
private boolean runOver = false;//是否结束线程的标识
/**
* 构造函数,初始化连接池中的Connection
*
* @throws Exception
*/
public ConnectionPool() throws Exception
{
this.pool = new LinkedList();
//初始化最小数量的Connection
for (int i = 0; i
import java.sql.*;
import java.util.*;
/**
* ConnectionManager
* 数据库连接的管理类,使用连接池。默认的最小连接数和最大连接数分别为5,10。
* 如果用户指定的值大于默认值,就采用指定的值
*
* @author Michael Zeng
* @version 1.0 September 18, 2002
*
* @todo: 目前还只能支持一个数据库和一个连接池。因为在构造函数中指定了数据库的
* 各种参数,不是很灵活。下一步采用loadProperty()方法从一个配置文件中直接读取参
* 数,并且考虑支持多个连接池。
*/
public class ConnectionManager
{
private static ConnectionManager instance = null;
private ConnectionPool connPool = null;
private String driver, url, user, passwd;
private int minConn = 5, maxConn = 10;
private final long PERIOD = 20000; //线程等待的时间20秒
private final int TRY_TIMES = 5; //池中没有可用连接时的重试次数
/**
* 得到ConnectionManager的一个唯一实例
*
* @param _driver 数据库驱动程序
* @param _url 数据库的地址
* @param _user 数据库用户名
* @param _passwd 用户密码
* @param _minConn 最小支持的连接数目
* @param _maxConn 最大支持的连接数目
* @return ConnectionManager 唯一实例
*
* @throws Exception
*/
public static ConnectionManager getInstance(String _driver, String _url, String _user,
String _passwd, int _minConn, int _maxConn) throws Exception
{
if(instance == null)
{
instance = new ConnectionManager(_driver, _url, _user, _passwd,
_minConn, _maxConn);
}
return instance;
}
/**
* 从连接池中得到Conncetion的一个实例
*
* @return Connection 连接的实例,出现异常情况时,返回null
*
* @throws Exception
*/
public Connection getConnection() throws Exception
{
return this.connPool.getConnection();
}
/**
* 把一个Connection实例返回连接池,如果已经到了池的最大容量,
* 就把这个连接释放。
*
* @param conn 要返回的Connection
*
* @throws Exception
*/
public void freeConncetion(Connection conn) throws Exception
{
this.connPool.freeConncetion(conn);
}
/**
* 释放连接池中的所有Connection
*
* @throws Exception
*/
public void close()throws Exception
{
this.connPool.release();
}
/**
* 得到连接池的实际大小
*
* @return int 连接池的大小
*/
public int getPoolSize()
{
return this.connPool.getPoolSize();
}
/**
* 私有的构造函数
*
* @param _driver 数据库驱动程序
* @param _url 数据库的地址
* @param _user 数据库用户名
* @param _passwd 用户密码
* @param _minConn 最小支持的连接数目
* @param _maxConn 最大支持的连接数目
* @return ConnectionManager 实例
*
* @throws Exception
*/
private ConnectionManager(String _driver, String _url, String _user,
String _passwd, int _minConn, int _maxConn) throws Exception
{
this.driver = _driver;
this.url = _url;
this.user = _user;
this.passwd = _passwd;
//如果用户指定的值大于默认值,就采用指定的值
this.minConn = Math.max(this.minConn, _minConn);
this.maxConn = Math.max(this.maxConn, _maxConn);
//如果用户指定的min > max,强迫两个值相等
this.minConn = Math.min(this.minConn, this.maxConn);
this.connPool = new ConnectionPool();
}
/**
* ConnectionPool
* inner class
*/
private class ConnectionPool implements Runnable
{
private List pool = null;
private Thread runner = null;
private boolean runOver = false;//是否结束线程的标识
/**
* 构造函数,初始化连接池中的Connection
*
* @throws Exception
*/
public ConnectionPool() throws Exception
{
this.pool = new LinkedList();
//初始化最小数量的Connection
for (int i = 0; i
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!