zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    记一次内衣渗透
    mysql提权
    Token窃取与利用
    组策略首选项提权
    Windows错误配置提权
    windows内核溢出漏洞提权限
    xss漏洞
    mysql语句大全
    二叉树
    10个对所有学科都有用的Python数据可视化库
  • 原文地址:https://www.cnblogs.com/wshsdlau/p/5571699.html
Copyright © 2011-2022 走看看