1. 第一种方式:
a) 首先将对应数据库的驱动jar包拷贝到tomcat 安装目录下的lib目录。如果用到Apache DBCP连接池,需要另外拷贝commons-dbcp-1.2.2.jar, commons-pool-1.3.jar.
b) 在tomcat6.0安装目录下找到conf/server.xml 文件。打开文件并找到<host></host>标签
c) 在<host></host>标签之配置datasource如下:
<Context path="/jndi" docBase="D:\workspace\JNDI\WebRoot" override="true" allowLinking="true" reloadable="true">
<Resource
name="pk"
auth="Container"
type="javax.sql.DataSource"
maxActive="500"
initialSize = "10"
maxIdle="100"
maxWait="10000"
logAbandoned="true"
username="pk"
password="pk"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:pk"
/>
</Context>
注:
name 表示指定的jndi名称
auth 表示认证方式,一般为Container
type 表示数据源类型,使用标准的javax.sql.DataSource
maxActive 表示连接池当中最大的数据库连接
maxIdle 表示最大的空闲连接数
maxWait 当池的数据库连接已经被占用的时候,最大等待时间
username 表示数据库用户名
password 表示数据库用户的密码
driverClassName 表示JDBC DRIVER
url 表示数据库URL地址logAbandoned 表示被丢弃的数据库连接是否做记录,以便跟踪
initialSize 表示初始的连接数
注意: 如果项目中用到apache dbcp连接池,这里需要另外加上:
factory="org.apache.commons.dbcp.BasicDataSourceFactory".
d) 在web.xml中如下配置:(tomcat 5.5 以后可以不配置,建议配置)
<resource-ref>
<res-ref-name>pk</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
2. 第二种方式:
a) 在WebRoot/META-INF/下新建context.xml 文件.添加如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/jndi" docBase="D:\workspace\JNDI\WebRoot" override="true" allowLinking="true" reloadable="true">
<Resource
name="pk"
auth="Container"
type="javax.sql.DataSource"
maxActive="500"
initialSize = "10"
maxIdle="100"
maxWait="10000"
logAbandoned="true"
username="pk"
password="pk"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:pk"
/>
</Context>
注意: 1.如果项目中用到apache dbcp连接池,这里需要另外加上:
factory="org.apache.commons.dbcp.BasicDataSourceFactory".
2.如此配置,虚拟路径不生效.
b) 在web.xml 中:(Tomcat5.5以后版本可不写)
<resource-ref>
<res-ref-name>pk</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3. 第三种方式:使用tomcat自带的dbcp
a) 基本上同第二种方式,只是需要更改一个属性:
factory = org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
4. 第四种方式:
a) 在tomcat6.0安装目录下conf/context.xml 中,添加如下内容:
<Context path="/jndi" docBase="D:\workspace\JNDI\WebRoot" override="true" allowLinking="true" reloadable="true">
<Resource
name="pk"
auth="Container"
type="javax.sql.DataSource"
maxActive="500"
initialSize = "10"
maxIdle="100"
maxWait="10000"
logAbandoned="true"
username="pk"
password="pk"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:pk"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
/>
</Context>
注意: 虚拟目录不再生效.
b) 在web.xml 中:
<resource-ref>
<res-ref-name>pk</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
5. 第五种方式:
a) 在tomcat安装目录下conf/server.xml中,找到<GlobalNamingResources></GlobalNamingResources>,在其间加入如下内容:
<Resource
name="pk"
auth="Container"
type="javax.sql.DataSource"
maxActive="500"
initialSize = "10"
maxIdle="100"
maxWait="10000"
logAbandoned="true"
username="pk"
password="pk"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:pk"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
/>
b) 在tomcat安装目录下conf/context.xml 中的<Context></Context>加入如下配置.
<ResourceLink global="pk" name="pk" type="javax.sql.Datasource"/>
Global: The name of the linked global resource in the global JNDI context.
name: The name of the resource link to be created, relative to the java:comp/env context.
Type: The fully qualified Java class name expected by the web application when it performs a lookup for this resource link.
同样在context中加入虚拟目录设置,不会生效.
c) web.xml 中:
<resource-ref>
<res-ref-name>pk</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
6. 第六种方式:
a) 在tomcat安装目录下conf\Catalina\localhost\下新建jndi.xml 文件,文件内容如下:
<Context path="/jndi" docBase="D:\workspace\JNDI\WebRoot" override="true" allowLinking="true" reloadable="true">
<Resource
name="pk"
auth="Container"
type="javax.sql.DataSource"
maxActive="500"
initialSize = "10"
maxIdle="100"
maxWait="10000"
logAbandoned="true"
username="pk"
password="pk"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:pk"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
/>
</Context>
注意: 1.jndi.xml 文件名必须同path的路径名相同.
2.此时虚拟路径生效.
b) Web.xml 中:
<resource-ref>
<res-ref-name>pk</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
7. 测试:
a) 测试:新建jsp页面.添加如下代码:
<%@page import="java.sql.*"%>
<%@page import="javax.naming.*" %>
<%@page import="javax.sql.*"%>
<%
//JNDI 数据源测试
Context context = null;
DataSource dataSource = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/pk");
conn = dataSource.getConnection();
String sql = "select * from dept t where id=?";
ps = conn.prepareStatement(sql);
ps.setInt(1, 48);
rs = ps.executeQuery();
while (rs.next()) {
out.print(rs.getString("dname"));
}
} catch (NamingException e) {
//
e.printStackTrace();
} catch (SQLException e) {
//
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
//
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
//
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
//
}
}
}
%>