tomcat数据库连接池的技术整理(支持oracle、sql server)

原创 2011年03月18日 09:43:00

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数据库连接池

       今天下午花了三个小时的时间研究了一下基于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配置信息:

 

Xml代码 复制代码 收藏代码
  1. <Resource name="jdbc/oracle" type="javax.sql.DataSource" auth="Container" />  
  2.     <ResourceParams name="UserDatabase">  
  3.       <parameter>  
  4.         <name>factory</name>  
  5.         <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>  
  6.       </parameter>  
  7.       <parameter>  
  8.         <name>pathname</name>  
  9.         <value>conf/tomcat-users.xml</value>  
  10.       </parameter>  
  11.     </ResourceParams>  
  12.     <ResourceParams name="jdbc/oracle">  
  13.       <parameter>  
  14.         <name>maxWait</name>  
  15.         <value>5000</value>  
  16.       </parameter>  
  17.       <parameter>  
  18.         <name>maxActive</name>  
  19.         <value>4</value>  
  20.       </parameter>  
  21.       <parameter>  
  22.         <name>password</name>  
  23.         <value>password</value>  
  24.       </parameter>  
  25.       <parameter>  
  26.         <name>url</name>  
  27.         <value>jdbc:oracle:thin:@localhost:1521:firstdb</value>  
  28.       </parameter>  
  29.       <parameter>  
  30.         <name>driverClassName</name>  
  31.         <value>oracle.jdbc.driver.OracleDriver</value>  
  32.       </parameter>  
  33.       <parameter>  
  34.         <name>maxIdle</name>  
  35.         <value>2</value>  
  36.       </parameter>  
  37.       <parameter>  
  38.         <name>username</name>  
  39.         <value>mocha</value>  
  40.       </parameter>  
  41.     </ResourceParams>  

 

 

     (2)接下来进入最重要的一步,也是很多人(包括我)忽略掉的地方,引起配置的失败,无法获得数据库连接。所以各位睁大眼睛看看是怎么做的。嘻嘻……

 

      进入Tomcat5.0安装目录, 如Tomcat 5.0/conf/Catalina/localhost ,在此目录中建立一个XML文件,文件名和项目名称同名,如 MochaOnline.xml , 在文件中新增Context节点并加入和 server.xml 文件中刚刚配置的DataSource代码即可,如下所示:

 

C#代码 复制代码 收藏代码
  1. <?xml version='1.0' encoding='utf-8'?>   
  2. <Context docBase="C:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/MochaOnline"  
  3.     path="/MochaOnline" workDir="work/Catalina/localhost/MochaOnline">   
  4.     <Resource name="jdbc/oracle" type="javax.sql.DataSource"  
  5.         auth="Container" />   
  6.     <ResourceParams name="UserDatabase">   
  7.         <parameter>   
  8.             <name>factory</name>   
  9.             <value>   
  10.                 org.apache.catalina.users.MemoryUserDatabaseFactory   
  11.             </value>   
  12.         </parameter>   
  13.         <parameter>   
  14.             <name>pathname</name>   
  15.             <value>conf/tomcat-users.xml</value>   
  16.         </parameter>   
  17.     </ResourceParams>   
  18.     <ResourceParams name="jdbc/oracle">   
  19.         <parameter>   
  20.             <name>maxWait</name>   
  21.             <value>5000</value>   
  22.         </parameter>   
  23.         <parameter>   
  24.             <name>maxActive</name>   
  25.             <value>4</value>   
  26.         </parameter>   
  27.         <parameter>   
  28.             <name>password</name>   
  29.             <value>password</value>   
  30.         </parameter>   
  31.         <parameter>   
  32.             <name>url</name>   
  33.             <value>jdbc:oracle:thin:@localhost:1521:firstdb</value>   
  34.         </parameter>   
  35.         <parameter>   
  36.             <name>driverClassName</name>   
  37.             <value>oracle.jdbc.driver.OracleDriver</value>   
  38.         </parameter>   
  39.         <parameter>   
  40.             <name>maxIdle</name>   
  41.             <value>2</value>   
  42.         </parameter>   
  43.         <parameter>   
  44.             <name>username</name>   
  45.             <value>mocha</value>   
  46.         </parameter>   
  47.     </ResourceParams>   
  48. </Context>  

 

 

      (3)完成上面两步后,就可以配置Web项目中的 web.xml 文件了,在其中配置资源引用,以便在项目启动时,将资源加载进来。

 

Xml代码 复制代码 收藏代码
  1. <resource-ref>  
  2.           <res-ref-name>jdbc/oracle</res-ref-name>  
  3.           <res-type>javax.sql.DataSource</res-type>  
  4.           <res-auth>Container</res-auth>  
  5. </resource-ref>  

 

 

       (4)最后代码编写,获得连接池中的连接。

 

Java代码 复制代码 收藏代码
  1. try {   
  2.     Context ctx = new InitialContext();   
  3.     DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/oracle");   
  4.     ds.getConnection();   
  5. catch (Exception e) {   
  6.     e.printStackTrace();   
  7. }  

 

               到此为止,基于Tomcat5.0的Oracle10g连接池已经配置完成了,另外在测试连接时,一定要在Web项目中调用连接,不要以Java程序的形式来运行,因为连接池是由Tomcat来提供的,不从容器中找,是不会有结果的。

              

               (完)xusweeter @ 2010年07月29日 晚22:08

 

 

Tomcat数据库连接池的配置方法总结

实例使用的Tomcat版本为6.0(叶涛为您解答) 方法一: 在Tomcat的conf/context.xml中配置 在Tomcat\apache-tomcat-6.0.33\conf目录下的...
  • yetaodiao
  • yetaodiao
  • 2013年10月17日 14:36
  • 37981

配置Tomcat连接池(配置server.xml文件)

配置Tomcat连接池:1、配置 conf/server.xml,创建DataSource资源,并且为其指定参数;2、在web.xml中引用资源;3、在javabean、servlet中使用资源;se...
  • mxz391
  • mxz391
  • 2007年05月02日 16:56
  • 3879

通过Tomcat连接池连接SQL Server数据库

配置Tomcat连接池主要使用的是标签,下面对本实例中用到标签中的属性进行详细讲解。 (1)name:数据库连接池名称。 (2)type:数据库连接池类型。 (3)driverClassName...
  • q1203595629
  • q1203595629
  • 2013年07月26日 15:42
  • 2211

关于Sql Server最大连接数(Max Pool Size)的配置问题

Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置 参考数据库链接串: [code=sql] [/code] 查看应用程序...
  • springflower66
  • springflower66
  • 2016年06月27日 11:34
  • 3011

关于Sql Server数据库连接池的使用

最近在使用Java的数据库连接池,那么C#针对Sql Server有没有数据库连接池呢? 首先我们需要一个数据库连接字符串,例如:"Data Source=server;Initial Catalo...
  • ceclar123
  • ceclar123
  • 2013年09月24日 22:25
  • 5601

tomcat 7配置数据库连接池,使用SQL Server2005实现

昨天看了一些网上的tomcat数据库连接池配置的东西,但是一直没配好,主要原因是网上的文章几乎没有争对tomcat 7进行配置的,而且针对SQL SERVER的也不多,今天上午看了官方的文档,花了一上...
  • hazqfp
  • hazqfp
  • 2011年11月19日 20:12
  • 1570

ADO.NET中SQL Server数据库连接池

实际上,大多数应用程序仅使用一个或几个不同的连接配置。 这意味着在执行应用程序期间,许多相同的连接将反复地打开和关闭。 为了使打开的连接成本最低,ADO.NET 使用称为连接池的优化方法。 连接池减...
  • unciel
  • unciel
  • 2011年08月12日 10:24
  • 404

ADO.NET中SQL Server数据库连接池

连接到数据库服务器通常由几个需要很长时间的步骤组成。 必须建立物理通道(例如套接字或命名管道),必须与服务器进行初次握手,必须分析连接字符串信息,必须由服务器对连接进行身份验证,必须运行检查以便在当前...
  • payne1010
  • payne1010
  • 2012年12月26日 14:10
  • 261

tomcat 6.0.20 连接池配置 SQL server 2000数据库

我的测试是程序是index.jsp                       JSP测试页面      Hello,test JNDI ! ");%>       Cont...
  • hazqfp
  • hazqfp
  • 2011年11月19日 20:11
  • 504

tomcat6.0配置sql2005数据库连接池.doc

  • 2014年04月25日 13:16
  • 36KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tomcat数据库连接池的技术整理(支持oracle、sql server)
举报原因:
原因补充:

(最多只允许输入30个字)