Tomcat数据库连接池的配置方法总结

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

数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏,这样可以明显提高对数据库操作的性能.

数据库连接池在初始化的时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是又最小数据库连接数来设定的,无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中.

数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:

1.最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费.

2.最大连接数是连接池申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待对了中,这回影响之后的数据库操作

如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接,不过,这些小于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时被释放.

实例使用的Tomcat版本为6.0

方法一: 在Tomcat的conf/context.xml中配置
在Tomcatapache-tomcat-6.0.33conf目录下的context.xml文件中配置默认值如下:

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

配置连接池:

<?xml version='1.0' encoding='utf-8'?>
 

<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!--配置oracle数据库的连接池-->
    <Resource name="jdbc/oracleds"
        author="Container"
        type="javax.sql.DataSource"
        maxActive="100"
        maxIdle="30"
        maxWait="10000"
        username="scott"
        password="tiger"
        driverClassName="oracle.jdbc.dirver.OracleDriver"
        url="jdbc:oracle:thin:@127.0.0.1:1521:ora9" />

    <!--配置mysql数据库的连接池,
        需要做的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下
        maxIdle 连接池中最多可空闲maxIdle个连接
        minIdle 连接池中最少空闲maxIdle个连接
        initialSize 初始化连接数目
        maxWait 连接池中连接用完时,新的请求等待时间,毫秒
        username 数据库用户名
        password 数据库密码
        -->
    <Resource name="jdbc/mysqlds"
        auth="Container"
        type="javax.sql.DataSource"
        username="root"
        password="root"
        maxIdle="30"
        maxWait="10000"
        maxActive="100"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://127.0.0.1:3306/db_blog" />

</Context>

配置好后需要注意的两个步骤
 

1.将对应数据库的驱动类放到tomcat的lib目录西安

2.重新启动tomcat服务器,让配置生效

在web应用程序的web.xml中设置数据源参考,如下:

在<web-app></web-app>节点中加入下面内容

<resource-ref>
 

      <description>mysql数据库连接池</description>
      <!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值"jdbc/mysqlds"一致 -->
      <res-ref-name>jdbc/mysqlds</res-ref-name>
      <!-- 资源类型 -->
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

错误解决:
 

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
 

    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at com.iblog.util.DBPoolUtil.<clinit>(DBPoolUtil.java:34)

解决方案:
 

上面的异常信息是配置文件中JNDI没有初始化造成的

如果下面的问题都不存在

1.要去检查下配置文件中连接数据库的URL参数是否正确2.以及是否导入了正常的包3.检查在Tomcat中conf/server.xml文件,检查是否设置useNaming="false",如果是,去掉

2.那就是通过main方法测试的,这个数据源不支持这样的测试方法,程序要运行在Tomcat中才能找到相应的数据源.[我在测试时犯这样的错导致上面错误出现]

<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>     
 

<%@ page import="java.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.sql.DataSource" %>
<html>
<head>
<title>Tomcat6.0 JNDI!</title>
</head>
  <body>
   Tomcat连接池测试,获取数据源 <br>
    <%
        try {
            //初始化查找命名空间
            Context ctx = new InitialContext();
            //参数java:/comp/env为固定路径
            Context envContext = (Context)ctx.lookup("java:/comp/env");
            //参数jdbc/mysqlds为数据源和JNDI绑定的名字
            DataSource ds = (DataSource)envContext.lookup("jdbc/mysqlds");
            Connection conn = ds.getConnection();
            conn.close();
            out.println("<span style='color:red;'>JNDI测试成功<span>");
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    %>
  </body>
</html>   

运行效果:
 

方法二:在Tomcat的conf/server.xml中配置

打开tomcat的conf/server.xml文件,找到<GlobalNamingResources></GlobalNamingResources>节点,默认的内容如下

<GlobalNamingResources>
 

    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>

在该节点中加入相关的池配置信息,如下
 

  <GlobalNamingResources>
 

             <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />

             <!--配置mysql数据库的连接池,
                需要做的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下
               -->
             <Resource name="jdbc/mysqlds"
              auth="Container"
              type="javax.sql.DataSource"
              username="root"
              password="root"
              maxIdle="30"
              maxWait="10000"
              maxActive="100"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://127.0.0.1:3306/db_blog" />
  </GlobalNamingResources>

在tomcat的conf/context.xml文件中的<Context></Context>节点中加入如下内容
 

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

然后在web项目中的WEB-INF目录下的web.xml中配置

<resource-ref>
 

      <description>mysql数据库连接池</description>
      <!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值"jdbc/mysqlds"一致 -->
      <res-ref-name>jdbc/mysqlds</res-ref-name>
      <!-- 资源类型 -->
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

同样配置好后,需要重新启动服务器,让配置生效.
 

方法三:在Tomcat的conf/server.xml中配置虚拟目录时配置 

在配置虚拟目录时,也就是在配置conf下面的server.xml时,在context标签内添加池配置.

在说该方法之前,先说一下,如何用tomcat配置虚拟目录

在tomcatconf下server.xml中找到

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
</Host>

在其中添加:

<Context path="/website" docBase="F:/myweb" reloadable="true"></Context>

注意:

docBase要改成你的项目目录。

path为虚拟路径,访问时的路径,注意:一定要加“/” debug建议设置为0

reloadable设置为true。  

这样重新启动tomcat

实例中如下配置

<Context path="/website" docBase="D:/program files/Tomcat/apache-tomcat-6.0.33/webapps/iblog.war" reloadable="true">
</Context>

接下来添加池配置,如下

<!--配置虚拟目录-->
 

<Context path="/website" docBase="D:/program files/Tomcat/apache-tomcat-6.0.33/webapps/iblog.war" reloadable="true">
            <Resource name="jdbc/mysqlds"
            auth="Container"
            type="javax.sql.DataSource"
            username="root"
            password="root"
            maxIdle="30"
            maxWait="10000"
            maxActive="100"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://127.0.0.1:3306/db_blog"
            />
</Context>

启动服务器,测试,注意因为我们配置了path值为”/website”,所以访问的路径应该为website.如下图:
 

方法四:在Web项目中的META-INF目录下新建一个文件context.xml,写入配置

注意:是META-INF目录下,不是WEB-INF目录下

<?xml version='1.0' encoding='utf-8'?>
 

<Context>
    <Resource name="jdbc/mysqlds"
        auth="Container"
        type="javax.sql.DataSource"
        username="root"
        password="root"
        maxIdle="30"
        maxWait="10000"
        maxActive="100"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://127.0.0.1:3306/db_blog"
        logAbandoned="true" />
</Context>

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索tomcat
, xml
, 数据库
, 数据库连接池
, 数据库连接
, 连接池
, 方法
, druid连接池问题
, 配置
, initialcontext
, java项目配置虚拟路径
, tomcat关闭释放资源
, web xml配置问题
连接池配置
tomcat 连接池配置、tomcat线程池配置、tomcat7连接池配置、tomcat配置jdbc连接池、tomcat连接池配置优化,以便于您获取更多的相关知识。

时间: 2024-08-03 12:42:43

Tomcat数据库连接池的配置方法总结的相关文章

Tomcat数据库连接池的配置与使用

Tomcat Tomcat数据库连接池估计现在使用的不多了,现在都是DBCP,C3P0之类的,在很多软件项目中,dbcp,c3p0确实很好,配置一下随便用,使用Tomcat连接池可能不是很方便:但后来发现,在分布式服务器或者分库中使用Tomcat数据库连接池确实不错,可以一次启动打开不同库上的连接池: 以下是配置文件,conf下的server.xml文件(原来内容全部清除) <Server port="8005" shutdown="SHUTDOWN">

tomcat下数据库连接池的配置

tomcat数据库连接池配置在server.xml中添加到<content>中 <!-----------------------------------------------------------------------> <Resource name="jdbc/smsgroup" scope="Shareable" type="javax.sql.DataSource"/>          <

tomcat以及tomcat环境变量安装配置方法教程_Tomcat

我们下载安装了tomcat,那么tomcat环境变量配置怎么配置?下面小编就和大家分享下tomcat环境变量的配置. tomcat安装版本 1.JDK:版本为jdk-7-windows-i586.exe    下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html2.tomcat:版本为apache-tomcat-7.0.33-windows-x86.zip    下载地址http://tomcat.apach

Tomcat 常用功能的配置方法

问题描述 1启动内存参数的配置 tomcat/bin/catalina.bat如果是linux就是catalina.sh 在rem的后面增加如下参数 setJAVA_OPTS=-Xms256m-Xmx256m-XX:MaxPermSize=64m2修改Tomcat的JDK目录 打开tomcat/bin/catalina.bat 在最后一个rem后面增加 setJAVA_HOME=C:ProgramFilesJavajdk1.6.03增加虚拟目录 /tomcat/conf/server.xml 第

困扰我两天的问题--关于tomcat数据库连接池 sqlserver2000.提示错误为:Already closed. ResultSet is closed 先谢了!!

问题描述 错误信息:closeAlreadyclosed.getrolegetrole[Microsoft][ODBCSQLServerDriver]连接占线导致另一个hstmt[Microsoft][ODBCSQLServerDriver]连接占线导致另一个hstmtgetroleResultSetisclosedcloseConnectionisclosed.departid1rolenameisInvalidhandleParserUtils:warningorg.xml.sax.SAXP

JSP中tomcat的SQL Server2000数据库连接池的配置

环境: 1. 数据库:Microsoft SQL Server 2000 2. 数据库驱动程序:net.sourceforge.jtds.jdbc.Driver JNDI(Java Naming and Directory Interface)概述: Tomcat4(5)提供了一个与Java Enterprise Edition应用服务相兼容的JNDI--InitialContext实现实例.它的初始数据设置在$CATALINA_HOME/conf/server.xml文件里,并可能在网页应用环

Tomcat中DataSource的配置方法

很多网上的文章都在说要改Server.xml,包括我手上的一本<Eclipse 从入门到精通>.不过经过今天的噩梦般的体验,最终还是没有改Server.xml,把DataSource配置好了.中间走过无数弯路,包括把 Tomcat从5.5.9降到5.0.28(最终还是没有用5.5.9,周围人都说,不要用最新的东西--实验室的都在用4.1--). 先说一下关于Tomcat 5.5.9的问题,由于Tomcat5.5.9没有带上admin包,必须要自己下,下完以后复制到对应的目录.另外还有一重要步骤

tomcat虚拟路径的配置方法汇总_Tomcat

一般我们都是直接引用webapps下面的web项目,如果我们要部署一个在其它地方的WEB项目,这就要在TOMCAT中设置虚拟路径了,Tomcat的加载web顺序是先加载 $Tomcat_home$\conf\Catalina\localhost下面的xml文件(文件中配置了web项目所在路径),然后再加载webapps下的web项目. 假如我们要部署d:\project\下面的XXX项目(XXX为项目名). 这时我们有两种方法: 方法一: 在$Tomcat_home$\conf\Catalina

Tomcat 多个应用配置方法_Tomcat

复制代码 代码如下: <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyrigh