More Related Content
Similar to Tomcat连接池配置方法V2.1 (20)
Tomcat连接池配置方法V2.1
- 1. Tomcat 连接池配置方法
Zianed Hou
zianed@live.cn
0、准备工作
1、配置Tomcat的server.xml文件
2、工程中加入context.xml文件
3、Catalina/localhost/加入${appName}.xml
4、注意事项
5、测试jsp
6、Tomcat6 对连接池的支持
7、javax.sql.RowSet对连接池的支持
Zianed Version 2.1 1
- 2. 0、准备工作
在$CATALINA_HOME/common/lib/中加入 class12.jar 包
1、配置Tomcat的server.xml文件
在$CATALINA_HOME/conf/server.xml 的<Host>中 :
<Context path="/test" docBase="E:/test">
<Resource name="jdbc/linary"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="scott"
password="tiger"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:linary"/>
</Context>
2、工程中加入context.xml文件
在 test 工程的 META-INF 中加入 context.xml 文件:
注:此时工程必须是在 webapp 中
<Context path="/test" docBase="/test">
<Resource name="jdbc/linary"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="scott"
password="tiger"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:linary"/>
</Context>
Zianed Version 2.1 2
- 3. 3、Catalina/localhost/加入${appName}.xml
在 $CATALINA_HOME/conf/Catalina/localhost/ 下 加 入 一 个 和 工 程 名 一 致 的
test.xml 文件:
<Context path="/test" docBase="E:/test">
<Resource name="jdbc/linary"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="scott"
password="tiger"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:linary"/>
</Context>
4、注意事项
有时需要在 WEB-INF/web.xml 中加入,增加工程依赖的资源
注:在大部分时间没有加,并不报错
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/linary</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
5、测试 jsp
测试代码:
//getPool.jsp
<%@page contentType="text/html; charset=GBK"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.naming.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
Zianed Version 2.1 3
- 4. <title>Test of connection pool</title>
</head>
<body>
<%
out.print("Start<br/>");
try{
InitialContext ctx = new InitialContext();
javax.sql.DataSource connectionPool = (javax.sql.DataSource)
ctx.lookup("java:comp/env/jdbc/linary");
Connection conn = connectionPool.getConnection();
out.print("DB connection pool run OK!");
conn.close();
}
catch(Exception ex){
out.print(ex.getMessage());
ex.printStackTrace();
}
%>
</body>
</html>
6、Tomcat6 对连接池的支持
Tomcat 引入了 tomcat-dbcp 包,自动支持 dbcp 连接池的构建。
测试代码:
public class DataSourcePool {
public static DataSource initDataSource(String url, String username,
String password) {
BasicDataSource bds = new BasicDataSource();
bds.setUrl(url);
bds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
bds.setUsername(username);
bds.setPassword(password);
bds.setMaxActive(5);
return bds;
}
public static void closeDataSource(DataSource ds) throws SQLException
{
BasicDataSource bds = (BasicDataSource) ds;
Zianed Version 2.1 4
- 5. bds.close();
}
/**
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws InstantiationException,
IllegalAccessException, ClassNotFoundException {
String url = "jdbc:oracle:thin:@192.168.1.125:1521:testjoe";
String username = "linary";
String password = "linary";
// 创建BasicDataSource
DataSource dataSource = initDataSource(url, username, password);
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
// 创建JDBC对象
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = dataSource.getConnection();
st = conn.createStatement();
String sql = "select * from emp";
rs = st.executeQuery(sql);
System.out.println("ResultSet Results:");
int numcols = rs.getMetaData().getColumnCount();
while (rs.next()) {
for (int i = 1; i <= numcols; i++) {
System.out.print(rs.getString(i) + "t");
}
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
Zianed Version 2.1 5
- 6. rs.close();
}
if (st != null) {
st.close();
}
if (conn != null) {
conn.close();
}
if (dataSource != null) {
closeDataSource(dataSource);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
7、javax.sql.RowSet对连接池的支持
可以直接将连接池作为参数传递给RowSet
测试代码:
<%@page contentType="text/html; charset=GBK"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="com.sun.rowset.*"%>
<%@ page import="javax.sql.rowset.*"%>
<%@ page import="javax.naming.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=gb2312">
<title>Test of connection pool</title>
</head>
<body>
<%
out.print("Start<br/>");
try{
InitialContext ctx = new InitialContext();
javax.sql.DataSource connectionPool =
(javax.sql.DataSource) ctx.lookup("java:comp/env/jdbc/linary");
Zianed Version 2.1 6
- 7. Connection conn = connectionPool.getConnection();
out.print("DB connection pool run OK!<br/>");
conn.close();
}
catch(Exception ex){
out.print(ex.getMessage());
ex.printStackTrace();
}
%>
<%
try{
//InitialContext ctx = new InitialContext();
//javax.sql.DataSource connectionPool =
(javax.sql.DataSource) ctx.lookup("java:comp/env/jdbc/linary");
JdbcRowSet jrs=new JdbcRowSetImpl();
jrs.setDataSourceName("java:comp/env/jdbc/linary");
jrs.setCommand("select * from emp");
jrs.execute();
int numcols = jrs.getMetaData().getColumnCount();
System.out.println("JdbcRowSet Result:");
out.print("JdbcRowSet Result<br/>");
while (jrs.next()) {
for (int i = 1; i <= numcols; i++) {
out.print(jrs.getString(i) + "t");
}
out.print("<br/>");
}
jrs.close();
}
catch(Exception ex){
out.print(ex.getMessage());
ex.printStackTrace();
}
%>
</body>
</html>
Zianed Version 2.1 7