Tomcat连接池

转载 2012年03月21日 17:03:30
 Tomcat连接池的配置,官方文档,在此记录一下。

        1.MySQL
            1.1 Context configuration:
<Context path="/DBTest" docBase="DBTest"
        debug="5" reloadable="true" crossContext="true"<
        <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/<
</Context<
             1.2 web.xml configuration:
<resource-ref<
      <description<DB Connection</description<
      <res-ref-name<jdbc/TestDB</res-ref-name<
      <res-type<javax.sql.DataSource</res-type<
      <res-auth<Container</res-auth<     / /据说还可以是Application
  </resource-ref<                
            1.3 Test code 还可以在jsp中直接使用数据源
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %<
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %<
...
<sql:query var="rs" dataSource="jdbc/TestDB"<
        select id, foo, bar from testdata
</sql:query<
...
<c:forEach var="row" items="${rs.rows}"<
    Foo ${row.foo}<br/<
    Bar ${row.bar}<br/<
</c:forEach<

        2. Oracle
            2.1 Context configuration:
<Resource name="jdbc/myoracle" auth="Container"
              type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@127.0.0.1:1521:mysid"
              username="scott" password="tiger" maxActive="20" maxIdle="10"
              maxWait="-1"/<
            2.2 web.xml configuration:
<resource-ref<
    <description<Oracle Datasource example</description<
    <res-ref-name<jdbc/myoracle</res-ref-name<
    <res-type<javax.sql.DataSource</res-type<
    <res-auth<Container</res-auth<
</resource-ref<
            2.3 Test code
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
//etc.

        把配置放在Context 标签对里面只对当前应用有效,要想对整个TomCat有效,可以放到GlobalNamingResources里面。(强烈申明,此种情况好像是5.0版本前是这样设置的,5.5和6.0版本如果要是全局的话,就在Tomcat_Home\conf下的context.xml文件直接配置)

        Tomcat6的连接池设置有一些不一样,在server.xml中文配置老是报Cannot create JDBC driver of class '' for connect URL 'null' 的错误,需要将Tomcat6安装路径的conf目录下的context.xml文件拷贝到自己应用的META-INF目录下,并添加<Resource /<的配置。

        连接池使用的问题,官方说明如下,水平太次,不敢翻译,抄录之:
Intermittent dB Connection Failures:
       
Tomcat runs within a JVM. The JVM periodically performs garbage collection (GC) to remove java objects which are no longer being used. When the JVM performs GC execution of code within Tomcat freezes. If the maximum time configured for establishment of a dB connection is less than the amount of time garbage collection took you can get a db conneciton failure. 
        To collect data on how long garbage collection is taking add the -verbose:gc argument to your CATALINA_OPTS environment variable when starting Tomcat. When verbose gc is enabled your $CATALINA_BASE/logs/catalina.out log file will include data for every garbage collection including how long it took.
        When your JVM is tuned correctly 99% of the time a GC will take less than one second. The remainder will only take a few seconds. Rarely, if ever should a GC take more than 10 seconds.
        Make sure that the db connection timeout is set to 10-15 seconds. For the DBCP you set this using the parameter maxWait.
Random Connection Closed Exceptions:
        These can occur when one request gets a db connection from the connection pool and closes it twice. When using a connection pool, closing the connection just returns it to the pool for reuse by another request, it doesn't close the connection. And Tomcat uses multiple threads to handle concurrent requests. Here is an example of the sequence of events which could cause this error in Tomcat:
----------------------------------------------------------------------------------------------
  Request 1 running in Thread 1 gets a db connection.
  Request 1 closes the db connection.
  The JVM switches the running thread to Thread 2
  Request 2 running in Thread 2 gets a db connection
  (the same db connection just closed by Request 1).
  The JVM switches the running thread back to Thread 1
  Request 1 closes the db connection a second time in a finally block.
  The JVM switches the running thread back to Thread 2
  Request 2 Thread 2 tries to use the db connection but fails
  because Request 1 closed it.
----------------------------------------------------------------------------------------------
Here is an example of properly written code to use a db connection obtained from a connection pool:
Connection conn = null;
  Statement stmt = null;  // Or PreparedStatement if needed
  ResultSet rs = null;
  try {
    conn = ... get connection from connection pool ...
    stmt = conn.createStatement("select ...");
    rs = stmt.executeQuery();
    ... iterate through the result set ...
    rs.close();
    rs = null;
    stmt.close();
    stmt = null;
    conn.close(); // Return to connection pool
    conn = null;  // Make sure we don't close it twice
  } catch (SQLException e) {
    ... deal with errors ...
  } finally {
    // Always make sure result sets and statements are closed,
    // and the connection is returned to the pool
    if (rs != null) {
      try { rs.close(); } catch (SQLException e) { ; }
      rs = null;    //方便gc进行垃圾回收
    }
    if (stmt != null) {
      try { stmt.close(); } catch (SQLException e) { ; }
      stmt = null;
    }
    if (conn != null) {
      try { conn.close(); } catch (SQLException e) { ; }
      conn = null;
    }
  }

在spring中使用TomCat已配好的数据源:

  1. <!-- 通过JNDI 使用应用服务器 的Connection Pool--<  
  2. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"<  
  3.     <property name="jndiName" value="java:comp/env/jdbc/coral"/<  
  4. </bean< 
 

Java连接池详解 tomcat

对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决我们的问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为...
  • u011088260
  • u011088260
  • 2016年11月23日 20:36
  • 1920

Tomcat中连接池的配置和使用

对于大型网站来说,信息查询的次数会非常多,每次查询都需要这样的过程:加载驱动程序、创建连接、创建语句对象、执行SQL语句、关闭这些对象。建立与数据库之间的连接和释放连接会占用很多系统的时间。如果能够让...
  • JavaEETeacher
  • JavaEETeacher
  • 2007年04月27日 13:19
  • 4707

tomcat7连接池使用

一直纠结于数据库连接池的实现,今天终于挤出时间来实现一下。tomcat之前连接池使用dbcp实现,dbcp有很多的缺点,现在的tomcat采用了自己实现的线程池,用起来还是非常的简单方面的。整体操作如...
  • dliyuedong
  • dliyuedong
  • 2014年04月10日 09:41
  • 11951

tomcat连接池的三个重要参数(用于处理连接池满的问题)

tomcat连接池的三个重要参数 tomcat连接池的三个重要参数,连接池的配置很重要,配置不好容易造成程序运行部稳定,下面把常见的问题归纳了下: a.   如果设为true则to...
  • nidayewocao
  • nidayewocao
  • 2011年11月04日 10:35
  • 1856

Tomcat7.0配置连接池的步骤

Tomcat7.0配置连接池的步骤: 第一步:在Tomcat的配置文件$Tomcat7.0$\conf\context.xml中添加信息:           na...
  • luxiaoyu_sdc
  • luxiaoyu_sdc
  • 2012年03月31日 19:19
  • 4313

Tomcat7.0与Oracle10数据库连接池配置

数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正式针对这个问题提出...
  • yanmei_yao
  • yanmei_yao
  • 2012年03月10日 19:44
  • 7090

Tomcat中配置数据源和连接池

(1)为什么需要配置数据源和连接池? 我们知道在每次java程序俩接数据库的时候我们都需要请求连接数据库然后打开读取数据然后关闭, 这样使得每一个用户访问的时候都需要服务器做出相应,这样的话服务器...
  • u010870518
  • u010870518
  • 2014年09月01日 17:28
  • 2640

tomcat自带连接池dbcp配置以及优化说明

转自:http://www.totcms.com/html/201602-29/20160229114145.htm 一个网站每天大概有20万的访问量,使用的tomcat自带dbcp连接...
  • acoolper
  • acoolper
  • 2017年03月10日 10:43
  • 4108

配置tomcat7自带数据库连接池

1.配置tomcat下conf/context.xml
  • woaigaolaoshi
  • woaigaolaoshi
  • 2016年07月01日 14:54
  • 2254

tomcat 连接池活动数目监控

关于如何配置Tomcat数据库连接池,网上已有太多文章了。可是找不到一篇文章能 告诉我,怎么能得到Tomcat连接池的当前连接数。如果想要监视Tomcat的运行状况,这 是一个重要参数。所以我花了...
  • jgwei
  • jgwei
  • 2012年03月09日 08:28
  • 6224
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tomcat连接池
举报原因:
原因补充:

(最多只允许输入30个字)