也是很早之前找的一些资料,都可能因版本的升级等原因有所不同了!!

按J2EE标准配置连结池,至少需要改动两个文件 $CATALINA_HOME/conf/server.xml 和 /WEB-INF/web.xml。而tomcat中,所用数据库的驱动可以用jar文件的形式(驱动为zip文件的,改后缀名为jar即可)放在$CATALINA_HOME/common/lib目录下(tomcat会自动加载该目录中jar文件),本例中就是把oracle的JDBC驱动classes12.zip更名为classes12.jar使用的。

首先,server.xml在tomcat的安装目录conf目录下,连结池数据源的驱动、URL、用户名、密码,以及此连结产生资源名的等参数都保存在这里。下面就是一个例子:

<Context ...>

 ...

 <Resource name="jdbc/Test" auth="Container" type="javax.sql.DataSource"/>

 <ResourceParams name="jdbc/Test">

   <parameter>

     <name>user</name>

     <value></value>

   </parameter>

   <parameter>

     <name>password</name>

     <value></value>

   </parameter>

   <parameter>

     <name>driverClassName</name>

     <value>sun.jdbc.odbc.JdbcOdbcDriver</value>

   </parameter>

   <parameter>

     <name>driverName</name>

     <value>jdbc:odbc:test</value>

   </parameter>

 </ResourceParams>

 ...

</Context>

这里有一点大家尤其要注意的是Context中有path和docBase参数,server.xml中默认有一个
<Context path="/examples" docBase="examples" debug="0" reloadable="true">
如果把上面的代码放在这个<Context>之间,那它就是用来设置exmaple中的一个数据连结池资源,其他发布目录包括ROOT目录是无法调用到的。所以测试用的JSP页面也应该放到$CATALINA_HOME/webapps/examples目录下。如果你要在其他目录下发布的话,就应该建立一个相应的<Context>,并设置相应的连结资源。
言归正传,看了上面的代码,很容易理解,此数据库连结池的资源名为jdbc/Test。这个资源名在tomcat启动后根据server.xml中的参数立即生成,JSP和Servlet一般即直接调用了。不过按照J2EE的规范,应该在WEB-INF目录中的web.xml部署文件来实现此资源的调度(也可以将资源名重新映射成为你所需要的名字)。按照前面提到的,应该在examples/WEB-INF目录下的web.xml文件中加入如下代码:

<resource-ref>

 <description>

   Resource reference to a factory for java.sql.Connection

   instances that may be used for talking to a particular

   database that is configured in the server.xml file.

 </description>

 <res-ref-name>

   jdbc/Test

 </res-ref-name>

 <res-type>

   javax.sql.DataSource

 </res-type>

 <res-auth>

   Container

 </res-auth>

</resource-ref>
1.在$CATALINA_HOME/conf/server.xml中添加配置信息,声明连接池的具体信息,添加内容如下:
  
  <!--声明连接池-->
  
  <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"/>
  
  <!-- 对连接池的参数进行设置 -->
  
  <ResourceParams name="jdbc/mysql">
  
  <parameter>
  
  <name>factory</name>
  
  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
  
  </parameter>
  
  <parameter>
  
  <name>maxWait</name>
  
  <value>5000</value>
  
  </parameter>
  
  <parameter>
  
  <name>maxActive</name>
  
  <value>20</value>
  
  </parameter>
  
  <parameter>
  
  <name>username</name>
  
  <value>shopadm</value>
  
  </parameter>
  
  <parameter>
  
  <name>password</name>
  
  <value>123</value>
  
  </parameter>
  
  <parameter>
  
  <name>url</name>
  
  <value>jdbc:mysql://localhost/shopdb?useUnicode=true&charact-erEncoding=gb2312</value>
  
  </parameter>
  
  <parameter>
  
  <name>driverClassName</name>
  
  <value>com.mysql.jdbc.Driver</value>
  
  </parameter>
  
  <parameter>
  
  <name>maxIdle</name>
  
  <value>10</value>
  
  </parameter>
  
  </ResourceParams>
  
  2. 在$CATALINA_HOME/conf/web.xml的</web-app>前添加如下信息:
  
  <resource-ref>
  
  <description>DB Connection</description>
  
  <res-ref-name>jdbc/mysql</res-ref-name>
  
  <res-type>javax.sql.DataSource</res-type>
  
  <res-auth>Container</res-auth>
  
  </resource-ref>
  
  其中<res-ref-name>中的参数名必须和server.xml中声明的连接名一样。
  
  3. 在$CATALINA_HOME/conf/catalina/localhost目录下找到需要进行数据库连接的当前程序的配置信息,比如这里是shopping.xml,在这个文件中添加如下信息:
  
  <Context …>
  
  …
  
  <ResourceLink name=”jdbc/mysql” global=”jdbc/mysql” type=”javax.sql.DataSource”/>
  
  …
  
  </Context>
  
  大功告成!
  
  在此基础上,参考Tomcat官方网站的用户手册,摸索出另外一种配置连接池的方法,这个方法不需要对server.xml进行修改,只要对需要使用到连接池的程序的配置文档进行修改就可以了。方法如下:
  
  1.$CATALINA_HOME/conf/catalina/localhost目录下找到需要数据库连接池的程序的配置文档,此处是shopping.xml。在<Context> </Context>之间添加如下信息,声明一个数据库连接池:
  
  <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"/>
  
  <ResourceParams name="jdbc/mysql">
  
  <parameter>
  
  <name>factory</name>
  
  <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
  
  </parameter>
  
  <parameter>
  
  <name>maxWait</name>
  
  <value>5000</value>
  
  </parameter>
  
  <parameter>
  
  <name>maxActive</name>
  
  <value>20</value>
  
  </parameter>
  
  <parameter>
  
  <name>password</name>
  
  <value>123</value>
  
  </parameter>
  
  <parameter>
  
  <name>url</name>
  
  <value>jdbc:mysql://localhost/shopdb?useUnicode=true&characterEncoding=gb2312</value>
  
  </parameter>
  
  <parameter>
  
  <name>driverClassName</name>
  
  <value>com.mysql.jdbc.Driver</value>
  
  </parameter>
  
  <parameter>
  
  <name>maxIdle</name>
  
  <value>10</value>
  
  </parameter>
  
  <parameter>
  
  <name>username</name>
  
  <value>shopadm</value>
  
  </parameter>
  
  </ResourceParams>
  
  这里的参数和上一种方法中添加到server.xml里的信息几乎是完全一样的。
  
  2.在对应程序的WEB-INF下建立一个web.xml文档,添加如下信息:
  
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  
  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  
  version="2.4">
  
  <resource-ref>
  
  <description>DB Connection</description>
  
  <res-ref-name>jdbc/mysql</res-ref-name>
  
  <res-type>javax.sql.DataSource</res-type>
  
  <res-auth>Container</res-auth>
  
  </resource-ref>
  
  </web-app>
  
  关键是斜体字的部分,指向前面声明的连接池。


 


 


Tomcat 5.5 配置 MySQL 数据库连接池

用了最新的几个咚咚,搞了整整一天终于搞清楚了Tomcat 5.5 配置 MySQL 数据库连接池,网上的经验并不能完全用到新环境里面,我写出整个过程以方便大家配置。


1 环境描述

 

JDK 1.5 
  Tomcat 5.5.4 
  MySQL 4.0.20 
  MySQL JDBC 3.0.15 
  Commons dbcp 1.2.1 

2 准备工作 
  JDK, Tomcat, MySQL安装过程并非我的重点,略过。 
  从http://dev.mysql.com/downloads/下载mysql-connector-java-3.0.15-ga.zip,将其中的mysql-connector-java-3.0.15-ga-bin.jar放到jre/lib/ext和Tomcat 5.5/common/lib里面。 
  从http://jakarta.apache.org/commons/dbcp/下载commons-dbcp-1.2.1.zip,将其中的commons-dbcp-1.2.1.jar放到jre/lib/ext和Tomcat 5.5/common/lib里面。 

3 配置Tomcat 
  在Tomcat 5.5/conf/server.xml的<GlobalNamingResources>中添加: 
<Resource name="JDBC for MySQL" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" password="" maxIdle="2" maxWait="5000" username="root" url="jdbc:mysql://localhost/test" maxActive="4"/>。 
  在Tomcat 5.5/webapps/test/WEB-INF/web.xml的<web-app>中添加: 
<resource-ref> 
<description>MySQL Connection Pool</description> 
<res-ref-name>JDBC for MySQL</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref> 
  在Tomcat 5.5/webapps/test/META-INF/context.xml的<Context>中添加: 
<ResourceLink name="JDBC for MySQL" global="JDBC for MySQL" type="javax.sql.DataSourcer"/> 

4 测试 
  重启Tomcat服务器,写一个test.jsp: 
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" 
"http://www.w3.org/TR/REC-html40/strict.dtd"> 
<%@ page import="java.sql.*"%> 
<%@ page import="javax.sql.*"%> 
<%@ page import="javax.naming.*"%> 
<%@ page session="false" %> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<title>Test of MySQL connection pool</title> 
</head> 
<body> 
<% 
out.print("Start<br/>"); 
try{ 
Context initCtx = new InitialContext(); 
Context ctx = (Context) initCtx.lookup("java:comp/env"); 
Object obj = (Object) ctx.lookup("JDBC for MySQL"); 
javax.sql.DataSource ds = (javax.sql.DataSource)obj; 
Connection conn = ds.getConnection(); 
out.print("MySQL connection pool runs perfectly!"); 
conn.close(); 
} 
catch(Exception ex){ 
out.print(ex.getMessage()); 
ex.printStackTrace(); 
} 
%> 
</body> 
</html>

  在浏览器中浏览该jsp文件,成功了哦。记得千万要用完close哦,不然一会就耗尽了。这一点可以通过以root身份登录MySQL,运行show processlist;命令来查看当前所有连接。

<script language="javascript" src="/ad/js/edu_left_300-300.js" type="text/javascript"></script>

 

1.将数据库驱动程序的JAR文件放在Tomcat的 common/lib 中;
  2.在server.xml中设置数据源,以MySQL数据库为例,如下:
  

在<GlobalNamingResources> </GlobalNamingResources>节点中加入,
   <Resource
   name="jdbc/DBPool"
   type="javax.sql.DataSource"
   password="root"
   driverClassName="com.mysql.jdbc.Driver"
   maxIdle="2"
   maxWait="5000"
   username="root"
   url="jdbc:mysql://127.0.0.1:3306/test"
   maxActive="4"/>
   属性说明:name,数据源名称,通常取”jdbc/XXX”的格式;
   type,”javax.sql.DataSource”;
   password,数据库用户密码;
   driveClassName,数据库驱动;
   maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
   接将被标记为不可用,然后被释放。设为0表示无限制。
   MaxActive,连接池的最大数据库连接数。设为0表示无限制。
   maxWait ,最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示
   无限制。
  3.在你的web应用程序的web.xml中设置数据源参考,如下:
   在<web-app></web-app>节点中加入,
   <resource-ref>
   <description>MySQL DB Connection Pool</description>
   <res-ref-name>jdbc/DBPool</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
   <res-sharing-scope>Shareable</res-sharing-scope>
   </resource-ref>
   子节点说明: description,描述信息;
   res-ref-name,参考数据源名字,同上一步的属性name;
   res-type,资源类型,”javax.sql.DataSource”;
   res-auth,”Container”;
   res-sharing-scope,”Shareable”;
  4.在web应用程序的context.xml中设置数据源链接,如下:
   在<Context></Context>节点中加入,
   <ResourceLink
   name="jdbc/DBPool" 
   type="javax.sql.DataSource" 
   global="jdbc/DBPool"/>
   属性说明:name,同第2步和第3步的属性name值,和子节点res-ref-name值;
   type,同样取”javax.sql.DataSource”;
   global,同name值。
   
  至此,设置完成,下面是如何使用数据库连接池。
  1.建立一个连接池类,DBPool.java,用来创建连接池,代码如下:
  import javax.naming.Context;
  import javax.naming.InitialContext;
  import javax.naming.NamingException;
  import javax.sql.DataSource;
  public class DBPool {
   private static DataSource pool;
   static {
   Context env = null;
   try {
   env = (Context) new InitialContext().lookup("java:comp/env");
   pool = (DataSource)env.lookup("jdbc/DBPool");
   if(pool==null) 
   System.err.println("'DBPool' is an unknown DataSource");
   } catch(NamingException ne) {
   ne.printStackTrace();
   }
   }
   public static DataSource getPool() {
   return pool;
   }


  }
  2.在要用到数据库操作的类或jsp页面中,用DBPool.getPool().getConnection(),获得一个Connection对象,就可以进行数据库操作,最后别忘了对Connection对象调用close()方法,注意:这里不会关闭这个Connection,而是将这个Connection放回数据库连接池。