Tomcat7 新的数据库连接池Tomcat jdbc pool介绍和配置

来源:互联网 发布:网络公会名称 编辑:程序博客网 时间:2024/05/04 16:21

Tomcat 7.0以前的版本都是使用commons-dbcp做为连接池的实现,但是 dbcp存在一些问题:

1dbcp是单线程的,为了保证线程安全会锁整个连接池

2dbcp性能不佳

3dbcp太复杂,超过 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>

<metahttp-equiv="Content-Type"content="text/html; charset=GB2312">

<title>Insert title here</title>

</head>

<body>

</body>

</html>

0 0
原创粉丝点击