配置Tomcat5.0的MySQL数据库连接池
  一提到应用系统我们就会想起一系列的数据库操作:建立数据库连接,打开某个数据库,对数据库中的数据进行存取,关闭数据库,建立一个与数据库的连接(Connection实例)往往是最耗时的,也是耗资源的,然而在进行频繁的这种数据库操作必定会使系统急剧性能下降,甚至可能导致系统耗尽而崩溃。
  数据库连接池技术可以有效的解决这个问题,它是我们操作数据库的好工具。我没有自己去写数据库连接池程序,用Tomcat提供的连接池来开发应用系统,我现在就将我的配置过程给大家分享:
本机环境:
WindowsXP SP2
JDK1.4.2
Tomcat5.028
mysql-connector-java-3.1.11-bin.jar
commons-dbcp-1.2.1.jar
有问题的请与我联系,E-Mail:yusaihua@gmail QQ:20841403
第一步:
到MySQL的网站上去下载MySQL的JDBC连接驱动mysql-connector-java-3.1.11-bin.jar,放到Tomcat的\common\lib目录下。
Tomcat的JDBC下载地址:sql/downloads/connector/j/3.1.html,这是MySQL的3.1.13版本的驱动,它支持4.0以上版本的MySQL数据库,我下的是一个ZIP包,没有下那个GZ包版的,有7.9M大,把包中的mysql-connector-java-3.1.11-bin.jar文件解压出来放在Tomcat的安装目录的\common\lib下面就可以拉(我的目录:C:\Program Files\Apache Software Foundation\Tomcat 5.0\common\lib),因为tomcat运行时会先到这个目录下Jar文件,如果你有兴趣的可以研究下它的源代码 :P。还要查检下%TOMCAT_HOME%下面是否有commons-dbcp-*jar;commons-pool-*jar;commons-collections-*.jar存在,没有的话就要自己到/commons/dbcp/去下,Tomcat5.0都自己带了有这几个commons文件。
第二步:
在浏览器中输入127.0.0.1:8080/admin,进入管理工具界面,点击左边的 Resources->Data Sour
ces,选择右边Data Source Actions 里面的下拉菜单中的 Creat New Data Source,进行添加数据库连接池
配置内容如下:
JNDI Name: jdbc/mysqlpool (设置连接池名称)
Data Source URL: jdbc:mysql://localhost/mysql?autoReconnect=true&useUnicode=true&characterEncoding=GB2312
(MySQL的JDBC的URL,mysql改成你要的数据库名称,characterEncoding=GB2312表示连接数据库用的字符集)
JDBC Driver Class: sql.jdbc.Driver (MySQL的JDBC驱动名称。)
User Name: root (MySQL的登陆用户名。)
Password:yusaihua (MySQL的登陆密码。)
Max. Active Connections:4 (最大活动连接数,默认是4,正式发布的时候,改成应该改大些1000左右比较好,这个数值自己掂量。)
Max. Idle Connections:2 (最大空闲连接数,默认是2)
Max. Wait for Connection:5000 (等待连接时间,单位是毫秒,默认5000)
Validation Query: (可以不填)
配置完了就点击最下面的 Save 按钮来保存设置,这时还没有完,还要点击最上面的
Commit Changes来提交刚才的设置,现在才算真正的把刚才的配置写入进%TOMCAT_HOME\l中
你打开%TOMCAT_HOME\l会发现多了以下代码:
<GlobalNamingResources>
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
<Resource name="jdbc/mysqlpool" type="javax.sql.DataSource"/>
<ResourceParams name="UserDatabase">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>l</value>
</parameter>
</ResourceParams>
<ResourceParams name="jdbc/mysqlpool">
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<parameter>
<name>password</name>
<value>yusaihua</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/mysql?autoReconnect=true&useUnicode=true&characterEncoding=GB2312</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value&sql.jdbc.Driver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
</ResourceParams>
</GlobalNamingResources>
其实我们可以照这个样子自己在l文件中加上面的代码效果是一样的,有了127.0.0.1:8080/admin这个工具就对我们来配置数据源就简单多拉,不用担心会出现打错大小字母等等低级错误了。
第三步:
由于刚才配置的数据库连接池是全局模式下的,我们的每一个Web应用都能使用它,但是你要用这个连接池就得在你的相应的Web应用的l(地址是%TOMCAT_HOME%\conf\Catalina\l) 的 <Context></Context>中加入如下代码:
<ResourceLink name="jdbc/mysqlpool" global="jdbc/mysql" type="javax.sql.DataSourcer"/>
这段文字的意思是申明你的Web要使用的连接池 jdbc/mysqlpool ,这三步是缺一都不可,到这时连接池才就算配置完拉。
第四步:
写一测试代码来测试一下刚才所做的一些吧,新建一个mysqlpool.jsp文件
内容如下:
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page session="false" %>
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
<%
out.print("连接池
测试开始<br>");
DataSource ds = null;
try{
InitialContext ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysqlpool");
Connection conn = ds.getConnection();
Statement stmt = ateStatement();
String strSql = " select * from user";
ResultSet rs = uteQuery(strSql);
()){
out.String(1)+" ");
out.String(2)+" ");
out.String(3)+" ");
out.String(4)+" ");
out.String(5)+" "); 
out.String(6)+"<br>");                 
}
out.print("测试结束");
}
catch(Exception ex){
out.print("出现例外,信息是:"+ex);
ex.printStackTrace();
}
%>
</head>
<body>
</body>
</html>
代码结束。
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysqlpool");这条代码表示名字叫jdbc/mysqlpool的DataSource。
在浏览器的地址栏输入: localhost:8080/yourweb/mysqlpool.jsp 出现了
连接池测试开始
localhost root 4a537f9733eb2bf4 Y Y Y
% root *13079F362E38088B725A0134245BEEA4F67AD89D Y Y Y
测试结束
恭喜你,你成功了!
注意:以上方法是在Tomcat5.028下调试成功的,我相信Tomcat5.X版本的通过这种方式也是可以达到一样有效果的。
还有一种方法也是可以配置数据库连接池的,我说明下
在%TOMCAT_HOME%\conf\Catalina\l的<Context></Context>之间加入以下代码就可以了,一步搞定
<Resource auth="Container" description="MySQL Connection Pool" name="jdbc/mysql" type="javax.sql.DataSource"/>
<ResourceParams name="UserDatabase">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>l</value>
</parameter>
</ResourceParams>
<ResourceParams name="jdbc/mysqlpool">
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<parameter>
<name>password</name>
<value>yusaihua</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/mysql?autoReconnect=true&useUnicode=true&characterEncoding=GB2312</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value&sql.jdbc.Driver</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
</ResourceParams>
不需要通过 127.0.0.1:8080/admin 来添加
数据库源,呵呵,比较简单吧!
  以上这些都是我花了二天才弄出来的,没有人帮忙,当时真的要疯掉了,一个这么简单的东西,哎,网上的东西多,但是太多错误了,我给出我调试程序时出现过的错误,和我的解决方案,希望能帮助大家,祝大家工作愉快 :)
1)错误提示:
javax.naming.NameNotFoundException: Name mysqlpool is not bound in this Context
->表示没有到叫"mysqlpool"的数据源。
a)请检查连接池配置文件%TOMCAT_HOME\l中的<Resource name="jdbc/mysqlpool" type="javax.sql.DataSource"/>是不是和mysqlpool.jsp里面的ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mysqlpool")一致
b)请检查你%TOMCAT_HOME%\conf\Catalina\l里面是否有
<ResourceLink name="jdbc/mysqlpool" global="jdbc/mysql" type="javax.sql.DataSourcer"/>代码。
2)错误提示:
org.apachemons.dbcp.SQLNestedException: Cannot load JDBC driver class 'sql.jdbc.Driver'
->说明dbcp没有发现JDBC驱动'sql.jdbc.Driver',请检查你的%TOMCAT_HOME%\common\lib\下面是否有MySQL的JDBC驱动程序,或者是不是下版本有问题,到sql/downloads/connector/j/3.1.html下载最新的版本。
  连接池运作原理:
  在实际应用开发中,特别是在WEB应用系统中,如果JSP、Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了这项技术,无需自己
编程,但是,深入了解这项技术是非常必要的。
  数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间。
  数据库连接池的主要操作如下:
  (1)建立数据库连接池对象(服务器启动)。
mysql下载的zip版本安装步骤  (2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。
  (3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。
  (4)存取数据库。
  (5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是
将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。
  (6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。
Path
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%SystemRoot%\system32;%SystemRoot%
ClassPath
.;C:\j2sdk\lib\dt.jar;C:\j2sdk\tools.jar;%TOMCAT_HOME%\common\lib\msutil.jar;%TOMCAT_HOME%\common\lib\msbase.jar;%TOMCAT_HOME%\common\lib\mssqlserver.jar;%TOMCAT_HOME%\common\lib\servlet-api.jar;%TOMCAT_HOME%\common\lib\mysql.jar

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。