JSP数据库连接池

时间:2022-10-01 09:01:25

JSP数据库连接池

摘要随着信息技术的高速发展与广泛应用,数据库技术在信息技术领域中的位置越来越重要,尤其是网络应用和电子商务的迅速发展,都需要数据库技术支持动态Web站点的运行,使用传统的开发模式对于一个简单的数据库应用,不会明显的增大系统的开销。但是对于一个复杂的数据库应用,情况就完全不同:频繁的建立、关闭数据库,会极大的降低系统的性能,增大系统的开销,甚至成为系统的瓶颈。因此采用运行速度更快、数据库访问效率更高的数据库技术,以提高系统的运行效率将是至关重要的。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器中,基本都提供了这项技术。

关键词连接池;数据库;JDBC

中图分类号TP3文献标识码A文章编号1673-9671-(2010)041-0024-01

1连接池的好处

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。

对于大多数应用程序,当它们正在处理通常需要数毫秒完成的事务时,仅需要能够访问JDBC连接的1个线程。当不处理事务时,这个连接就会闲置。相反,连接池允许闲置的连接被其它需要的线程使用。

当一个线程需要用JDBC对一个GBase或其它数据库操作时,它从池中请求一个连接。当这个线程使用完了这个连接,将它返回到连接池中,这样这就可以被其它想使用它的线程使用。

当连接从连接池中“借出”,它被请求它的线程专有地使用。从编程的角度来看,这和用户的线程每当需要一个JDBC连接的时候调用DriverManager.getConnection( )是一样的,采用连接池技术,可通过使用新的或已有的连接结束线程。

2连接池运作原理

数据库连接池技术的思想:将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,极大地节省系统资源和时间。

数据库连接池的主要操作如下:

1)建立数据库连接池对象。2)按照事先指定的参数创建初始数量的数据库连接。3)一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大,创建一个新的数据库连接。4)存取数据库。5)关闭数据库,释放所有数据库连接。6)释放数据库连接池对象。

3连接池实现

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

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( )

private DBConnectionManager( )//私有构造函数,在其中调用初始化函数init( )

public void freeConnection(String name, Connection con)//释放一个连接

public Connection getConnection(String name)//从连接池对象中得到一个连接

public Connection getConnection(String name, long time)

//从连接池对象中取得一个连接,time是等待时间

public synchronized void release( )//释放所有资源

private void createPools(Properties props)//创建一个或多个连接池

private void init()//初始化连接池管理类的唯一实例,由私有构造函数调用

private void loadDrivers(Properties props)//装载数据库驱动程序

}

4连接池使用

连接池在Servlet的使用步骤:

1)Servlet的生命周期:在开始建立servlet时,调用其初始化(init)方法。每个用户请求都导致一个调用前面建立的实例的service方法的线程。当服务器决定卸载一个servlet时,它首先调用该servlet的destroy方法。2)根据servlet的运行过程,在初始化函数中生成连接池管理类的唯一实例。

public void init( ) throws ServletException

{

connMgr = DBConnectionManager.getInstance();

}

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

public void destroy( ){

connMgr.release( );super.destroy( );

}

5结束语

对于众多用户访问的Web应用,采用数据库连接技术的系统在效率和稳定性上比采用传统的其他方式的系统要好很多。当前Web应用程序广泛采用B/S结构,其并发性决定了多用户同时访问数据库的问题。只有充分运用连接池访问技术,才能提高数据库的访问效率,改善Web应用,从而减少系统开销,大大提高整个Web应用系统的运行效率。

参考文献

[1]孙卫琴.Java网络编程精解[M].北京:电子工业出版社,2007.

[2]温尚书,陈石华,万欣.Java Web编程入门与实战[M].北京:人民邮电出版社,2010.

[3]孙鑫.Servlet/JSP深入详解-基于Tomcat的Web开发[M].北京:电子工业出版社,2008.

[4]高伟峰,黄辉.基于Java的数据库连接池技术的设计与实现[J].软件导刊,2007,7.

上一篇:浅谈基于FLASH的网络广告设计 下一篇:谈企业办公网安全