tomcat下配置DBCP的文章网络上已有很多,我在这里以我的理解方式做一下汇总。
首先,请务必将相应数据库驱动程序放入${catalina.home}/common/lib下,且尽量保证是.jar的驱动包(.zip形式我未试过,不知会否出问题)。
另外也请保证commons-pool、commons-dbcp以及commons-collections三个包已存在于${catalina.home}/common/lib目录下。
下面以oracle数据库为例来具体进行说明。
配置连接池资源Resource在tomcat5.0下与在tomcat5.5下的格式不太相同,5.0下格式如下:
<Resource name="jdbc/myoracle" auth="Container" type="javax.sql.DataSource">
</Resource>
<ResourceParams name="jdbc/oraclepool">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>username</name>
<value>username</value>
</parameter>
<parameter>
<name>password</name>
<value>password</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@servername:1521:sid</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.OracleDriver</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
</ResourceParams>
而在5.5下格式如下:
<Resource name="jdbc/myoracle" auth="Container" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@servername:1521:sid"
username="username" password="password" maxActive="20" maxIdle="10" maxWait="5000">
</Resource>
如果打算配置全局数据源(即任何一个app都可引用),请将以上元素放入${catalina.home}/conf/server.xml文件中的<GlobalNamingResources> </GlobalNamingResources>之间,然后使用以下两种方式来对其进行引用配置:
1.在server.xml中找到某一<Host>元素(一般为<Host name="localhost" debug="0" appBase="webapps">),然后在其下添加以下内容
<Context path="/webappName" docBase="${webappPath}" debug="5" reloadable="true" crossContext="true">
<ResourceLink name="jdbc/myoracle" global="jdbc/myoracle" type="javax.sql.DataSource"/>
</Context>
2.在${Catalina.home}/conf/Catalina/${hostname}(一般情况下${hostname}处为localhost)下添加于你的webapp同名的xml文件,例如你的webapp名叫myapp,则添加myapp.xml,并在其中添入与方式1中相同的内容。
如果打算配置局部数据源(即仅某一个app可以引用),则直接将Resource元素放入Context元素下,举例如下(请按相应版本添加):
<Context path="/webappName" docBase="${webappPath}" debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/myoracle" auth="Container" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@servername:1521:sid"
username="username" password="password" maxActive="20" maxIdle="10" maxWait="5000">
</Resource>
</Context>
而<Context>元素的添加方式则与全局方式一样。
配置完server.xml后,在你的web应用程序的web.xml中添加以下元素:
<resource-ref>
<description>test dbcp connection</description>
<res-ref-name>jdbc/myoracle</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
至此所有配置已完毕。接下来写一个测试用jsp文件test.jsp如下
<%@ page language="java" contentType="text/html; charset=gb2312"
pageEncoding="gb2312"%>
<%@ page import="javax.naming.*,javax.sql.DataSource" %>
<%@ page import="java.sql.*" %>
<%
Context initCtx = null;
DataSource ds = null;
Connection conn = null;
try{
initCtx = new InitialContext();
ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/myoracle");
conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select test from testtable");
if(rs.next()){
out.println(rs.getString("test"));
}
rs.close();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
%>
然后再浏览器中运行即可。
一些注意事项:
1.务必将tomcat版本与相应的Resource写法对应,否则会报Cannot create JDBC driver of class '' for connect URL 'null'的错误
2.在程序中使用context的方式查找jndi时,务必保证jndi有java环境前缀java:comp/env/,否则会报jndi无法找到的错误。
3.对于DB2数据库,如果你使用TYPE 2驱动,则需要有一个db2jcct2.dll文件在本地,在MyEclipse里启动tomcat,tomcat服务器配置,在path里“Append to library to path”里添加db2jcct2.dll所在的路径“C:/Program Files/IBM/SQLLIB/BIN”;如果使用TYPE 4驱动,则没有必要,但务必注意TYPE 4驱动的connect string格式为:jdbc:db2://ip:port/dbname