Yojo网页设计

首页 新闻中心 网页教程 图形图像 设计欣赏 编程开发 程序教程 网站运营 数据库教程
·ASP教程·ASP.net教程·PHP教程·JSP教程·编程杂谈·AJAX·XML

您现在的位置: yojo网页设计 >> 编程开发 >> JSP教程 >> 正文

 

Java中数据库连接池原理机制讲解

更新时间:2007-11-18 9:20:09 文章来源:互联网 .

2、连接池实现

下面给出连接池类和连接池管理类的主要属性及所要实现的基本接口:

public class DBConnectionPool implements TimerListener{ 
private int checkedOut;//已被分配出去的连接数 
private ArrayList freeConnections=new ArrayList();
//容器,空闲池,根据//创建时间顺序存放已创建但尚未分配出去的连接 
private    int    minConn;//连接池里连接的最小数量 
private    int    maxConn;//连接池里允许存在的最大连接数 
private    String    name;//为这个连接池取个名字,方便管理 
private    String    password;//连接数据库时需要的密码 
private    String    url;//所要创建连接的数据库的地址 
private    String    user;//连接数据库时需要的用户名 
public    Timer    timer;//定时器 
public    DBConnectionPool(String name,String URL,String user,
String password,int maxConn)//公开的构造函数 
public synchronized void freeConnection(Connection con) 
//使用完毕之后,把连接返还给空闲池 
public synchronized Connection getConnection(long    timeout)
//得到一个连接,timeout是等待时间 
public synchronized void release()
//断开所有连接,释放占用的系统资源 
private Connection newConnection()
//新建一个数据库连接 
public synchronized void TimerEvent()   
//定时器事件处理函数 

public class DBConnectionManager { 
static private DBConnectionManager instance;
//连接池管理类的唯一实例 
static private int clients;//客户数量 
private ArrayList drivers=new ArrayList();
//容器,存放数据库驱动程序 
private HashMap pools = new HashMap();
//以name/value的形式存取连接池对象的名字及连接池对象 
static synchronized public DBConnectionManager getInstance()
/**如果唯一的实例instance已经创建,直接返回这个实例;否则,调用私有构造函数,
创建连接池管理类的唯一实例*/     
private DBConnectionManager()
//私有构造函数,在其中调用初始化函数init() 
public void freeConnection(String name,Connection con)
//释放一个连接,name是一个连接池对象的名字 
public Connection getConnection(String name)
//从名字为name的连接池对象中得到一个连接 
public Connection getConnection(String name,long time)
//从名字为name的连接池对象中取得一个连接,time是等待时间 
public synchronized void release()//释放所有资源 
private void createPools(Properties props)
//根据属性文件提供的信息,创建一个或多个连接池 
private void init()//初始化连接池管理类的唯一实例,由私有构造函数调用 
private void loadDrivers(Properties props)//装载数据库驱动程序 
}

3、连接池使用

上面所实现的连接池在程序开发时如何应用到系统中呢?下面以Servlet为例说明连接池的使用。

Servlet的生命周期是:在开始建立servlet时,调用其初始化(init)方法。之后每个用户请求都导致一个调用前面建立的实例的service方法的线程。最后,当服务器决定卸载一个servlet时,它首先调用该servlet的destroy方法。

根据servlet的特点,我们可以在初始化函数中生成连接池管理类的唯一实例(其中包括创建一个或多个连接池)。如:

public void init() throws ServletException 

 connMgr=DBConnectionManager.getInstance();     
}

然后就可以在service方法中通过连接池名称使用连接池,执行数据库操作。最后在destroy方法中释放占用的系统资源,如:

public void destroy(){     
connMgr.release();   
super.destroy();     
}

结束语

在使用JDBC进行与数据库有关的应用开发中,数据库连接的管理是一个难点。很多时候,连接的混乱管理所造成的系统资源开销过大成为制约大型企业级应用效率的瓶颈。对于众多用户访问的Web应用,采用数据库连接技术的系统在效率和稳定性上比采用传统的其他方式的系统要好很多。本文阐述了使用JDBC访问数据库的技术?讨论了基于连接池技术的数据库连接管理的关键问题并给出了一个实现模型。文章所给出的是连接池管理程序的一种基本模式,为提高系统的整体性能,在此基础上还可以进行很多有意义的扩展。

上一页  [1] [2] 


点击: 文章地址:http://www.518web.net/bckf/jsp/1735.html

友情链接首页文字链接要求:PR≥4,搜索引擎正常收录,开通一年以上,内容健康充实的站点!申请...

Copyright(C) 2005-2008 518web.net,All Rights Reserve
Email:yojo.x@msn.com | 在线QQ:2306380 53614197| [浙ICP备08009643号]