09 二月 2008

Tomcat数据库连接池简单配置

一般情况下,我们要建立数据库连接,首先需要调用Class.forName()加载数据库驱动,然后调用驱动管理器建立数据库连接对象(即Connection对象)。


但是这种方式的数据库连接存在一个很大的问题。当访问量增多时,每一次不同用户的连接都需要经过一系列繁琐的步骤,最后访问结束,还需要关闭结果集,语句对象,连接对象。比较麻烦,而且这样的访问浪费很多时间。


在大型Web应用中,Servlet容器可能同时会接收到多个客户端的上千个请求,如何快速的对每个请求进行响应和服务十分重要。如果采用一个请求一个请求的处理,会导致响应时间非常迟钝。一种较好的解决方案就是采用多线程并发处理每个请求。


Servlet容器维护了一个线程池来服务请求。线程池实际上是等待执行代码的一组线程,这些线程我们称之为工作者线程。当Servlet容器接收到一个访问请求时,Servlet容器从线程池中选取一个工作者线程,将请求传递给该线程,然后由这个线程执行Servletservice()方法。如果当这个线程正在执行,而此时容器又接收到另一个请求,那么容器将会在线程池中选择另一个线程来对新的请求进行服务。这就是数据库连接池的最基本的作用。


显然,通过数据库连接池,能够很大程度上提高web容器的效率。


下面,我们就简单实现一个tomcat连接池的应用。


环境:jdk6.0tomcat5.5MySQL5.0 myeclipse6.0 Windows XP Pro


第一步:基本工作。


建立数据库test,建立表stu,两个字段,一个是学号(整型),一个是姓名(字符串),在myeclipse建立一个web工程test(为了省事,所以都起名为test),使用tomcat5.5作为web容器。



第二步:编写数据库访问代码(读取表stu中的记录)

代码

javax.sql包中,定义了DataSource接口,给我们提供了通过连接池建立数据库连接的方式。DataSource接口由驱动程序供应商来实现。利用DataSource建立数据库连接,不需要在客户程序中加载JDBC驱动。在程序中,通过向一个JNDIJava Naming and Directory)服务器查询来得到DataSource对象,然后调用DataSource对象的getConnection()方法来建立数据库的连接。以上代码就是描述的这个过程。


当访问完数据库之后,就可以调用close()方法结束数据连接。在普通的数据库访问程序中,客户程序得到的连接对象是物理连接,调用连接对象的close()方法将关闭连接,而采用线程池技术,客户程序得到的连接对象是连接池中物理连接的一个句柄,调用连接对象的close()方法之后,物理连接并没有关闭,只是删除了客户程序中连接对象和连接池中连接对象之间的联系。


第三步:在Tomcat中配置JDBC数据源。


JDBC数据源配置放到当前Web应用程序运行目录的配置文件中,如果当前你的工程名为“test”,你可以将你的Web应用程序配置文件起名为“test.xml”,编辑%CATALINA%/conf/Catalina/localhost/test.xml。内容如下:


 


部署描述符配置

在配置文件中Resource元素中,指定的JNDI名称为test。这个名称不一定非要和Context元素的名字一样,可以任起。


第四步:工程部署,运行。


结果如下:


运行结果

我们成功的以数据源的方式读取了数据库中的数据。

没有评论: