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

Tomcat 在 7.0 以前的版本都是使用commons-dbcp做为连接池的实现,但是 dbcp存在一些问题:
(1)dbcp 是单线程的,为了保证线程安全会锁整个连接池
(2)dbcp 性能不佳
(3)dbcp 太复杂,超过 60 个类,发展滞后。
因此,通常J2EE中还会使用其它的高性能连接池,如 C3P0,还有阿里系的 druid 等。为此,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 中直接使用的方法:
在conf/server.xml下的<GlobalNamingResources>节点里配置resource,例如:

<Resource name="jdbc/ens"
      auth="Container"
      type="javax.sql.DataSource"
      factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
      testWhileIdle="true"
      testOnBorrow="true"
      testOnReturn="false"
      validationInterval="30000"
      timeBetweenEvictionRunsMillis="30000"
      maxActive="100"
      minIdle="10"
      maxWait="10000"
      initialSize="10"
      removeAbandonedTimeout="60"
      removeAbandoned="true"
      logAbandoned="true"
      minEvictableIdleTimeMillis="30000"
      jmxEnabled="true"
      jdbcInterceptors=
"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
      username="root"
      password="123"
      driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://localhost:3306/ens"/>

然后,在context.xml文件的<Context></Context>节点中添加如下配置:

<ResourceLink global="jdbc/ens" name="jdbc/ens" type="javax.sql.DataSource"/>

global="jdbc/ens" 中的参数值("jdbc/ens")必须和上一段<Resource >配置中的name属性的值保持一样。name="jdbc/ens" 这个可以随便取,但是在程序中调用的时候,就应该与name的值保持一致。到这里,连接池已经配置好啦。

用JSP测试一下:

<%@ page language="java" pageEncoding="gbk"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.naming.Context"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<%
   //连接池的获取
    Connection conn = null;
    DataSource ds = null;
    ResultSet rs  =null;
    Statement stmt = null;
    Context initCtx = new InitialContext();
    ds =(DataSource)initCtx.lookup("java:comp/env/jdbc/ens");
   if(ds!=null){
        out.println("已经获得DataSource!");
        out.println("<br>");
        conn = ds.getConnection();
       try{
        stmt = conn.createStatement();
        String sql ="select * from ens_area";
        rs = stmt.executeQuery(sql);
        out.println("以下是从数据库中读取出来的数据:<br>");
            while(rs.next()){
                out.println("<br>");
                out.println(rs.getString("area_name"));
            }
       }catch(Exception ex){
         ex.printStackTrace();
       }finally{
          conn.close();
          rs.close();
          stmt.close();
       }
   }
%>

http://www.open-open.com/lib/view/open1365991769687.html
时间: 2024-10-11 17:37:38

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

使用 Tomcat 7 新的连接池 —— Tomcat jdbc pool

Tomcat 在 7.0 以前的版本都是使用 commons-dbcp 做为连接池的实现,但是 dbcp 饱受诟病,原因有: dbcp 是单线程的,为了保证线程安全会锁整个连接池 dbcp 性能不佳 dbcp 太复杂,超过 60 个类 dbcp 使用静态接口,在 JDK 1.6 编译有问题 dbcp 发展滞后 因此很多人会选择一些第三方的连接池组件,例如 c3p0 , bonecp, druid (@wenshao ) 等. 为此,Tomcat 从 7.0 开始引入一个新的模块:Tomcat j

tomcat jdbc pool

这是数据库端的配置,wait_timeout:表示客户端和数据库建立连接,执行sql语句后,保持连接300s才释放连接,若300s内又有新的sql执行,则重新计时. 最近有个问题,基于前任项目管理者遇到在使用tomcat连接池连接oracle/mysql时,经常出现建立的链接用不上了.是因为数据库服务器设置了wait_timeout参数,导致客户端持有的链接用不上.就将数据库连接wait_timeout设置到很大,这将导致一旦建立链接就不会释放,而数据库链接不可能无限大,有新的应用也在使用数据库

spring配置tomcat jdbc pool数据库连接池

<bean id="sqliteDataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close"> <!-- <bean class="org.apache.tomcat.jdbc.pool.PoolProperties"> --> <!-- 数据库连接池配置 --> <!--

Tomcat JDBC Pool使用说明

Maven依赖 <dependency>   <groupId>org.apache.tomcat</groupId>   <artifactId>tomcat-jdbc</artifactId>   <version>8.5.9</version> </dependency> 最新版本为9.0,推荐使用8.5.9稳定版 常用配置 连接池配置项很多,下面只列出了推荐配置,项目组可根据自身情况进行增减 <b

Class &#39;org.apache.tomcat.jdbc.pool.DataSource&#39; not found

把项目移动到新的运行环境时,明明包都导入了,项目也放进tomcat里面了,但是还会找不到该类 解决方法:项目右键选择底下的Properties ->project facets ->java 把Runtimes里面的Apache Tomcat的勾打上 这样才算把tomcat放进类路径里面 Class 'org.apache.tomcat.jdbc.pool.DataSource' not found 原文地址:https://www.cnblogs.com/unlasting/p/121796

数据库连接池--Tomcat内置实现

1.JNDI(Java Naming and Directory Interface,Java命名和目录接口) 是一组在Java应用中访问命名和目录服务的API.命名服务将名称和对象联系起来,使得我们可以用名称访问对象.目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性.可以理解为一个容器,可以在其中存放任意内容,在容器中为内容提供一个字符串名称,名称命名方式采用是目录结构方式,在其他地方引用该名称就可以得到该内容. 2.实现 思想:将数据库连接池作为服务器端的资源存放在JNDI容器

数据库连接池问题 Max Pool Size

摘自: http://blog.csdn.net/chensirbbk/article/details/6225268 Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置 参考数据库链接串: [code=sql]<add key="data" value="server=192.168.1.123; Port=3306; uid=root; pwd=root;database=data;pooling=true;min

JSDI——实现数据库连接池(JDBC改进)

一.将驱动jar包放到服务器(例如tomcat)目录下的lib包中,让服务器自动管理数据库连接 二.在项目根中的META-INF文件夹中,建立context.xml文件,其中需要配置数据源 1 <?xml version="1.0" encoding="UTF-8"?> 2 <Context> 3 <Resource name="jdbc/oracle" 4 auth="Container" 5

tomcat7的数据库连接池tomcatjdbc的25个优势

tomcat的JDBC连接池org.apache.tomcat.jdbc.pool更换或替代吗Apache Commons DBCP连接池. 为什么我们须要一个新的连接池? 这里有几个原因: 1.DBCP 1.x是单线程的. 为了成为线程安全的 共享锁整个池在短时间内在两个对象 分配和对象返回. 注意,这并不适用 下议院DBCP 2.x. 2.DBCP 1.x能够缓慢. 逻辑cpu数量的添加和 并发线程的数量试图借或返回 对象的添加,性能会减少. 对高并发 系统能够显著的影响. 请注意,这并不适