现在的位置: 首页 > 综合 > 正文

Tomcat Oracle数据库连接池设置与使用

2018年03月29日 ⁄ 综合 ⁄ 共 6581字 ⁄ 字号 评论关闭
Tomcat Oracle数据库连接池设置与使用

                                      

使用Tomcat数据库连接池的时候,在网上查了不少例子,这是本人做的一个Oracle的例子。

1.设置数据库的驱动

 OracleJDBC驱动设置为例:

 Oracle8i的驱动在/oracle/ora81/jdbc/lib/目录下。名字为classes12.zip

 Oracle9i的驱动在/oracle9i/jdbc/lib/目录下,名字为ojdbc14.jar

 将这个文件copyD:/Tomcat 4.1/common/lib 下。

 注意,如果使用Oracle8i 的驱动,则需要在D:/Tomcat 4.1/common/lib 目录下将classes12.zip更名为classes12.jar,因为Tomcat4不认识zip的后缀名。

2.设置Tomcat的连接池数据源

在网上看到一种直接利用Tomcat web应用管理界面(Tomcat Web Server Administration Tool)设置的方法,我在这使用了手工改动的方式:

打开Tomcat /conf/server.xml如果是使用Eclipse中的WTP测试,请找到对应的server.xml文件)中,找到<Context>映射对,例:

<Context path="/myapp" docBase="E:/Alex/temp/myapp" debug="0" reloadable="true" crossContext="true">

</Context>

在其中加入:

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

<ResourceParams name="jdbc/myoracle">

                <parameter>

                                <name>factory</name>

                                <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

                </parameter>

                <parameter>

                                <name>driverClassName</name>

                                <value>oracle.jdbc.driver.OracleDriver</value>

                </parameter>

                <parameter>

                                <name>url</name>

                                <value>jdbc:oracle:thin:@172.21.240.1:1521:itscoenr</value>

                </parameter>

                <parameter>

                                <name>username</name>

                                <value>myname</value>

                </parameter>

                <parameter>

                                <name>password</name>

                                <value>mypassword</value>

                </parameter>

                <parameter>

                                <name>maxActive</name>

                                <value>20</value>

                </parameter>

                <parameter>

                                <name>maxIdle</name>

                                <value>10</value>

                </parameter>

                <parameter>

                                <name>maxWait</name>

                                <value>10000</value>

                </parameter>                                         

</ResourceParams>

<ResourceLink global="jdbc/myoracle" name="jdbc/myoracle" type="javax.sql.DataSource"/>

               

在这添加了一个数据源,名字为jdbc/myoracle。以后是一些参数。

type”javax.sql.DataSource”;
password
,数据库用户密码;
driveClassName
,数据库驱动;
maxIdle
,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
MaxActive
,连接池的最大数据库连接数。设为0表示无限制。
maxWait
,最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。

最后添加的是一个web应用对全局连接池的引用说明,设置这个连接池的引用说明是非常重要的一步。
 
一些朋友在Tomcat4中配置连接池失败的原因大都归咎与此。还有网上一些文章说这是一个Tomcat4的一个Bug

全部改完之后为:

<Context path="/myapp" docBase="E:/myapp" debug="0" reloadable="true" crossContext="true">

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

<ResourceParams name="jdbc/myoracle">

                <parameter>

                                <name>factory</name>

                                <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

                </parameter>

                <parameter>

                                <name>driverClassName</name>

                                <value>oracle.jdbc.driver.OracleDriver</value>

                </parameter>

                <parameter>

                                <name>url</name>

                                <value>jdbc:oracle:thin:@172.21.240.1:1521:itscoenr</value>

                </parameter>

                <parameter>

                                <name>username</name>

                                <value>myname</value>

                </parameter>

                <parameter>

                                <name>password</name>

                                <value>mypassword</value>

                </parameter>

                <parameter>

                                <name>maxActive</name>

                                <value>20</value>

                </parameter>

                <parameter>

                                <name>maxIdle</name>

                                <value>10</value>

                </parameter>

                <parameter>

                                <name>maxWait</name>

                                <value>10000</value>

                </parameter>                                         

</ResourceParams>

<ResourceLink global="jdbc/myoracle" name="jdbc/myoracle" type="javax.sql.DataSource"/>

</Context>

3.设置web.xml

         到此,连接池的设置就完成了。 然后需要重新启动Tomcat,这样就可以使用连接池来工作了。

         但是,看到很多文章上说,还需要设置一下web.xml才能应用。我没有设置web.xml,连接池也可以完全使用。现在说一下web.xml的配置方法。

例为:

E:/myapp/WEB-INF/下的web.xml,打开,并在<web-app></web-app>中加入内容,加完后为:

<web-app>

<resource-ref>

                <description>Oracle Datasource example</description>

                <res-ref-name>jdbc/myoracle</res-ref-name>

                <res-type>javax.sql.DataSource</res-type>

                <res-auth>Container</res-auth>

</resource-ref>   

</web-app>

子节点说明: description,描述信息;
               res-ref-name
,参考数据源名字,同上一步的属性name
               res-type
,资源类型,”javax.sql.DataSource”
               res-auth
”Container”
               res-sharing-scope
”Shareable”

4.一个简单的JSP应用示例

一个简单的只有查询的JSP,内容如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

    pageEncoding="ISO-8859-1"%>

<%@ page import="javax.naming.*"%>

<%@ page import="javax.sql.*"%>

<%@ page import="java.sql.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Insert title here</title>

</head>

<body>

<%

      DataSource ds = null;

      try{

            Context initCtx = new InitialContext();

            Context envCtx = (Context) initCtx.lookup("java:comp/env");

           

            //获取连接池对象并进行类型转换

ds = (DataSource)envCtx.lookup("jdbc/myoracle");

           

            if(ds!=null){

                  out.println("Connection is OK!");

                  Connection cn=ds.getConnection();

                  if(cn!=null){

                        out.println("cn is Ok!");

                        Statement stmt = cn.createStatement();

                        ResultSet rst = stmt.executeQuery("select ename from emp");

                        out.println("<p>rst is Ok!" + rst.next());

                        while(rst.next()){

                              out.println("<P>Ename:" + rst.getString(1));

                        }

                  stmt.close();

                  rst.close();

                  cn.close();

                  }

                  else{

                        out.println("rst Fail!");

                  }

            }

            else{

                  out.println("Fail!");

            }                

      }

      catch(Exception ne){

            out.println(ne);

      }

%>

</body>

</html>

测试成功!

 

 
 
 
 
 
 
 
 
 
 
 
 

抱歉!评论已关闭.