Tomcat 数据库连接池

本文详细介绍了数据库连接池的工作原理,以Tomcat为例,阐述了如何配置全局和局部的数据库连接池,包括在`server.xml`和`context.xml`文件中的配置步骤。此外,还解释了连接池参数如`maxActive`、`maxIdle`和`maxWait`的作用,并提供了测试连接池的JSP代码示例。
每一次Web请求都要建立一次数据库连接,建立连接是一个费时的活动,每次都要花费0.05s-1s的时间,而且系统还要分配内存资源.这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销.可是对于现在的Web应用,尤其是大型电子商务网站,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃.对于每一次数据库连接,使用完后都要断开.否则程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库.

数据库连接池(connection pool)的工作原理:
为了解决资源的频繁分配,释放所造成的问题,可以采用数据库连接池技术.数据库连接池的基本思想就是为数据库连接建立一个"缓冲池".预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再放回去.我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接.更为重要的是我们可以通过连接池的管理机制监视数据库的连接数量,使用情况,为系统开发,测试及性能调整提供依据.

以SqlServer2000为例,将数据库驱动程序Jar文件放到Tomcat的common/lib目录下,JDBC驱动的相关Jar文件(mssqlserver.jar,msutil.jar,msbase.jar);

全局配置(Tomcat里的任何Web应用都能使用该配置的连接池)
1.打开Tomcat/conf/server.xml文件,在<GlobalNamingResources></GlobalNamingResources>中插入如下内容:
<Resource name="jdbc/poolName"
          auth="Container"
          type="javax.sql.DataSource"
          driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
          url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"
          username="sa"
          password="sa"
          maxActive="100"
          maxIdle="30"
          maxWait="10000"/>
2.打开Tomcat/conf目录下的context.xml文件,在<Context></Context>中插入如下内容:
<ResourceLink global="jdbc/poolName" name="jdbc/poolName" type="javax.sql.DataSource"/>

局部配置(仅为一个具体的Web项目所配置的数据源)
1.打开Tomcat/conf/server.xml文件,在<Host></Host>中插入如下内容:
<Context path="/pool" docBase="pool" debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/poolName"
          auth="Container"
          type="javax.sql.DataSource"
          driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
          url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"
          username="sa"
          password="sa"
          maxActive="100"
          maxIdle="30"
          maxWait="10000"/>
</Context>

注解:
maxActive:最大活跃连接数,指同时可以有多少个连接,设置为0没有限制.
maxIdle:最大空闲连接数,表示没有数据库连接时,连接池必须保持最大空闲连接数,设置为0没有限制.
maxWait:连接建立等待时间,单位为毫秒,设置为-1没有限制.

测试: pool.jsp
<%@page contentType="text/html;charset=utf-8" %>
<%@page import="java.sql.*" %>
<%@page import="javax.sql.*" %>
<%@page import="javax.naming.*" %>

<html>
<head>
<title>Tomcat连接池测试</title>
</head>
<body>
<%
  Context ctx = new InitialContext();
  DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/poolName");
  Connection conn = ds.getConnection();
  Statement stmt = conn.createStatement();
  ResultSet rs = stmt.executeQuery("select * from sales");
  while(rs.next()) {
    out.println(rs.getInt(1));
    out.println(rs.getString(2));
    out.println(rs.getString(3));
  }
  rs.close();
  stmt.close();
  conn.close(); 
 %>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值