Tomcat 在 7.0 以前的版本都是使用commons-dbcp做为连接池的实现,但是 dbcp存在一些问题:
(1)dbcp 是单线程的,为了保证线程安全会锁整个连接池
(2)dbcp 性能不佳
(3)dbcp 太复杂,超过 60 个类,发展滞后。
因此,通常J2EE中还会使用其它的高性能连接池,为此,Tomcat 从 7.0 开始引入一个新的模块: Tomcat jdbc pool
tomcat jdbc pool 近乎兼容 dbcp ,性能更高 异步方式获取连接
tomcat jdbc pool 是 tomcat 的一个模块,基于 tomcat JULI,使用 Tomcat 的日志框架
使用 javax.sql.PooledConnection 接口获取连接
支持高并发应用环境
超简单,核心文件只有8个,比 c3p0 还少
更好的空闲连接处理机制
支持 JMX
支持 XA Connection。
tomcat jdbc pool 可在 Tomcat 中直接使用,也可以在独立的应用中使用。
1.Tomcat 7中直接使用的方法:
在conf/server.xml下的<GlobalNamingResources>节点里配置resource,例如:
<Resource name="jdbc/sqlserver" auth="Container"
type="javax.sql.DataSource" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;DatabaseName=test"
username="sa" password="sa"
maxActive="5000" maxIdle="10" maxWait="-1"/>
在context.xml文件的<Context></Context>节点中添加如下配置:
<ResourceLink global="jdbc/sqlserver" name="jdbc/sqlserver" type="javax.sql.DataSource"/>
global=" jdbc/sqlserver " 中的参数值("jdbc/sqlserver ")必须和上一段<Resource >配置中的name属性的值保持一样。name="jdbc/sqlserver " 这个可以随便取,但是在程序中调用的时候,就应该与name的值保持一致。
2.JSP代码:
<%@ page language="java" contentType="text/html; charset=GB2312"
pageEncoding="GB2312"%>
<%@ page import="java.sql.*" %>
<%@ page import="javax.naming.*" %>
<%
try{
Context initCtx=new InitialContext();
Context ctx=(Context)initCtx.lookup("java:comp/env");
//获取连接池对象
Object obj=(Object)ctx.lookup("jdbc/sqlserver");
//类型转换
javax.sql.DataSource ds=(javax.sql.DataSource)obj;
Connection conn=ds.getConnection();
Statement stmt=conn.createStatement();
String strSql="select * from userTable";
ResultSet rs=stmt.executeQuery(strSql);
out.print("<table border style='font-size:10pt'>");
out.print("<tr><td colspan=8 align='center'>用户数据</td></tr>");
out.print("<tr>");
out.print("<td width=60>用户ID号</td>");
out.print("<td width=50>用户名</td>");
out.print("<td width=100>用户真实姓名</td>");
out.print("<td width=40>年龄</td>");
out.print("<td width=40>性别</td>");
out.print("<td width=100>联系地址</td>");
out.print("<td width=100>联系电话</td>");
out.print("<td width=100>添加时间</td>");
out.print("</tr>");
while(rs.next()){
out.print("<tr>");
out.print("<td>"+rs.getLong(1)+"</td>");
out.print("<td>"+rs.getString(2)+"</td>");
out.print("<td>"+rs.getString(4)+"</td>");
out.print("<td>"+rs.getInt("user_age")+"</td>");
out.print("<td>"+rs.getString("user_sex")+"</td>");
out.print("<td>"+rs.getString("user_address")+"</td>");
out.print("<td>"+rs.getString("user_telephone")+"</td>");
out.print("<td>"+rs.getString("add_time")+"</td>");
out.print("</tr>");
}
out.print("</table>");
}catch(Exception ex){
out.print(ex);
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>Insert title here</title>
</head>
<body>
</body>
</html>