tomcat连接池的方法
1:连接池所要解决的问题:
应用程序每一次与数据库的连接都会由于网络传输和执行数据库查询而严重降低了程序的执行效率,因此我们需要用到连接池将将我们经常要用到的数据保存在连接池中,这样就减少了网络传输和因查询而给程序执行效率带来的影响。
2:连接池的本质:用一个集合保存查询出来的数据。
3:连接池的实现原理:
我们要使用Connect pool,首先要做的是访问datasource(所有的要访问的数据都放在这里面)。datasource数据源是通过LDAP(light directory access protocal)软件进行管理的(其本质就是将数据源以树状结构进行存储,这样的话,方便查询(树状结构的查询效率是最快的),java通过JNDI(java naming directory interface)访问LDAP里面的数据。
4:在tomcat种配置连接池:
1)打开tomcat目录下的conf/context.cfg:在里面加入如下配置
Xml代码
<Resource driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:@localhost:1521:orcl" username="scott" password="tiger" maxActive="20" type="javax.sql.DataSource" author="Container" name="ds"></Resource>
<Resource driverClassName="oracle.jdbc.driver.OracleDriver"url="jdbc:oracle:thin:@localhost:1521:orcl" username="scott" password="tiger" maxActive="20" type="javax.sql.DataSource" author="Container" name="ds"></Resource>
其中:maxActive:代表的是要配置的最大连接数。
type:资源类型
2)通过应用程序执行上述连接:
Java代码
<%@page contentType="text/html" %>
<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<html>
<body>
<% Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/ds");//必须要
Connection con=ds.getConnection();
out.println("<h1>connection succeeful</h1>");
con.close();
%>
</body>
</html>
<%@page contentType="text/html" %>
<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="javax.naming.*"%>
<html>
<body>
<% Context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/ds");//必须要
Connection con=ds.getConnection();
out.println("<h1>connection succeeful</h1>");
con.close();
%>
</body>
</html>
conn.close():连接池是被覆盖了的,本质上的含义,把连接池借过来的连接还回去。
从零开始学java web 开发书上的例子
以sql server 2005为例,讲解tomcat6.0上的配置。
下载sqljdbc.jar放在tomcat的lib目录,tomcat/conf/context.xml文件,<Context></Context>中加入配置代码。
<Resource name="jdbc/dbplling" author="Container" type="javax.sql.DataSource" driverClassName="com.microsoft.sqlserverdriver.jdbc.sqlserverdriverDriver"url="jdbc:sqlserver//127.0.0.1:1433;databasename=testdemo" username="sa" password="123" maxActive="100" maxIdle="30"; maxWait="5000"></Resource>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>SQL Server 2005 DataSource</description>
<res-ref-name>jdbc/dbpooling</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
showUsers.jsp
<%@ page language="java" import="java.sql.*,javax.sql.*,javax.naming.*"
pageEncoding="GB2312"%>
<html>
<head>
<title>全部注册用户信息</title>
</head>
<body>
<%
try {
DataSource ds = null;
InitialContext ctx = new InitialContext();//建立上下文对象
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/dbpooling");//通过JNDI查找数据连接池
Connection conn = ds.getConnection();//获得数据库连接对象
PreparedStatement pstate = conn
.prepareStatement("select * from [User]");
ResultSet rs = pstate.executeQuery();
out.println("<table border=1>");
out.println("<tr><td>用户名</td><td>密码</td></tr>");
while (rs.next()) {
out.println("<tr><td>");
out.println(rs.getString(2));
out.println("</td><td>");
out.println(rs.getString(3));
out.println("</td></tr>");
}
out.println("</table>");
} catch (SQLException e) {
out.println(e);
}
%>
</body>
</html>
今天下午花了三个小时的时间研究了一下基于Tomcat5.0的Oracle10g的数据库连接池,本来以为很简单,因为以前做过基于Tomcat6.0配置的SQLServer2005数据库连接池,以为两者相差不多,可以三下五除二的搞定,谁知居然花了那么长的时间才搞定,特此记录一下,以免遗忘。
(1)首先,要配置DataSource,在Tomcat5.0/conf/目录下的 server.xml 文件中配置DataSource的相关信息,因为手写代码比较麻烦,从网上找到了一个快速配置DataSource的方法,就是使用Tomcat5.0的图形界面来配置相关的参数;启动Tomcat5.0,在地址栏中输入:http://localhost:端口号/admin,进入Tomcat5.0的图形管理界面,(Tomcat Web Server Administration Tool )输入Tomcat的登录帐户,进入管理界面;
选择左侧的Resources节点下的 Data Sources 选项(标识1处),进入DataSource配置界面,系统会自动从server.xml 中读取已有的DataSource配置,并以列表的形式展示给用户(标识2处),你可以点击名称查看或修改详细信息,如果没有已有配置也没有关系,Tomcat5.0提供了快速配置DataSource的方法,在右上角的Data Source Actions 处,选择下拉列表框中的 Create new DataSource ,即可进入创建DataSource界面,如图2所示。
填入如JNDI名称、数据库连接字符串、驱动器字符串、数据库帐户、密码、最大连接数、最长等待时间等相关参数后点击右上角的Sava按钮,并点击右上角的 Commit Changes 按钮就完成了DataSource的配置。
再次查看 server.xml ,发现已经增加了如下DataSource配置信息:
<Resource name="jdbc/oracle" type="javax.sql.DataSource" auth="Container" /> <ResourceParams name="UserDatabase"> <parameter> <name>factory</name> <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value> </parameter> <parameter> <name>pathname</name> <value>conf/tomcat-users.xml</value> </parameter> </ResourceParams> <ResourceParams name="jdbc/oracle"> <parameter> <name>maxWait</name> <value>5000</value> </parameter> <parameter> <name>maxActive</name> <value>4</value> </parameter> <parameter> <name>password</name> <value>password</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@localhost:1521:firstdb</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>maxIdle</name> <value>2</value> </parameter> <parameter> <name>username</name> <value>mocha</value> </parameter> </ResourceParams>
(2)接下来进入最重要的一步,也是很多人(包括我)忽略掉的地方,引起配置的失败,无法获得数据库连接。所以各位睁大眼睛看看是怎么做的。嘻嘻……
进入Tomcat5.0安装目录, 如Tomcat 5.0/conf/Catalina/localhost ,在此目录中建立一个XML文件,文件名和项目名称同名,如 MochaOnline.xml , 在文件中新增Context节点并加入和 server.xml 文件中刚刚配置的DataSource代码即可,如下所示:
<?xml version='1.0' encoding='utf-8'?> <Context docBase="C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/MochaOnline" path="/MochaOnline" workDir="work/Catalina/localhost/MochaOnline"> <Resource name="jdbc/oracle" type="javax.sql.DataSource" auth="Container" /> <ResourceParams name="UserDatabase"> <parameter> <name>factory</name> <value> org.apache.catalina.users.MemoryUserDatabaseFactory </value> </parameter> <parameter> <name>pathname</name> <value>conf/tomcat-users.xml</value> </parameter> </ResourceParams> <ResourceParams name="jdbc/oracle"> <parameter> <name>maxWait</name> <value>5000</value> </parameter> <parameter> <name>maxActive</name> <value>4</value> </parameter> <parameter> <name>password</name> <value>password</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@localhost:1521:firstdb</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>maxIdle</name> <value>2</value> </parameter> <parameter> <name>username</name> <value>mocha</value> </parameter> </ResourceParams> </Context>
(3)完成上面两步后,就可以配置Web项目中的 web.xml 文件了,在其中配置资源引用,以便在项目启动时,将资源加载进来。
<resource-ref> <res-ref-name>jdbc/oracle</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
(4)最后代码编写,获得连接池中的连接。
try { Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/oracle"); ds.getConnection(); } catch (Exception e) { e.printStackTrace(); }
到此为止,基于Tomcat5.0的Oracle10g连接池已经配置完成了,另外在测试连接时,一定要在Web项目中调用连接,不要以Java程序的形式来运行,因为连接池是由Tomcat来提供的,不从容器中找,是不会有结果的。
(完)xusweeter @ 2010年07月29日 晚22:08