`
茴香豆
  • 浏览: 132504 次
  • 性别: Icon_minigender_2
  • 来自: 桂林
社区版块
存档分类
最新评论

详解连接池的配置的过程以及可能出现错误的处理方法

阅读更多

一.为什么要用数据库链接池?

   当多个用户访问网站,并且长时间使用,那么其他访问者由于得不到链接而被堵。数据库服务器对于大量的链接请求也很难吃得消。

   为了实现“随开随关”的原则,并且避免大量创建Connection对象的现象(创建一个Connection对象,数据库大概可以完成8到10次 甚至更多的数据库检索),我们用到了数据库链接池。

   数据库连接池的原理:为服务器(如Tomcat)配置一个连接池,配置文件中指定所要链接的服务器和链接个数,这样服务器启动的时候,首先会连接目标数据库创建指定个数的活动链接,并将其放到连接池中。

二、链接池的配置

1.在tomcat中配置数据库链接池

 

http://buaasss.iteye.com/blog/777896 写道
(1)连接池配置(Database Connection Pool (DBCP) Configurations)

DBCP使用的是Jakarta-Commons Database Connection Pool 要使用连接池需要如下的组件即jar文件。

l Jakarta-Commons DBCP 1.1 对应commons-dbcp-1.1.jar。

l Jakarta-Commons Collections 2.0 对应commons-collections.jar。

l Jakarta-Commons Pool 1.1 对应commons-pool-1.1.jar。

这三个jar文件要与你的JDBC驱动程序一起放到【TOMCAT_HOME】\common\lib目录下以便让tomcat和你的web应用都能够找到。


注:

l 这三个jar文件是默认存在与【TOMCAT_HOME】\common\lib下的。

l 需要注意的地方:第三方的驱动程序或者其他类只能以*.jar的形式放到Tomcat的common\lib目录中,因为Tomcat只把*.jar文件加到CLASSPATH中。

l 不要把上诉三个文件放到WEB-INF/lib或者其他地方因为这样会引起混淆。



(2)通过配置阻止连接池漏洞

数据库连接池创建和管理连接池中建立好的数据库连接,循环使用这些连接以得到更好的效率。这样比始终为一个用户保持一个连接和为用户的请求频繁的建立和销毁数据库连接要高效的多。

这样就有一个问题出现了,一个Web应用程序必须显示的释放ResultSet,Statement和Connection。如果在关闭这些资源的过程中失败将导致这些资源永远不在可用,这就是所谓的连接池漏洞。这个漏洞最终会导致连接池中所有的连接不可用。

通过配置Jakarta Common DBCP可以跟踪和恢复那些被遗弃的数据库连接。

以下是一系列相关配置:

l 通过配置DBCP数据源中的参数removeAbandoned来保证删除被遗弃的连接使其可以被重新利用。

为ResourceParams(见下文的数据源配置)标签添加参数removeAbandoned

<parameter>

<name>removeAbandoned</name>

<value>true</value>

</parameter>

通过这样配置的以后当连接池中的有效连接接近用完时DBCP将试图恢复和重用被遗弃的连接。这个参数的值默认是false。

l 通过设置removeAbandonedTimeout来设置被遗弃的连接的超时的时间,即当一个连接连接被遗弃的时间超过设置的时间时那么它会自动转换成可利用的连接。

<parameter>

<name>removeAbandonedTimeout</name>

<value>60</value>

</parameter>

默认的超时时间是300秒。

l 设置logAbandoned参数,以将被遗弃的数据库连接的回收记入日志中

<parameter>

<name>logAbandoned</name>

<value>true</value>

</parameter>

这个参数默认为false。

  2.修改server.xml文件

    在最后的</Host>标记之前添加如:

 

<Context docBase="Epai-0.1" path="/Epai-0.1" reloadable="true" source="org.eclipse.jst.j2ee.server:Epai-0.1">
        <Resource  name="jdbc/epai" 
           auth="Container"
           type="javax.sql.DataSource"
           maxActive="100" maxIdle="30" maxWait="10000"
           username="root" password="plh"
           driverClassName="org.gjt.mm.mysql.Driver"
           url="jdbc:mysql://localhost:3306/epai">
      </Resource>
      <ResourceParams name="jdbc/epai">
      <name>factory</name>  
      <value>  
      org.apache.commons.dbcp.BasicDataSourceFactory   
      </value>  
      <parameter>
			<name>removeAbandoned</name>
			<!-- 回收被遗弃的(一般是忘了释放的)数据库连接到连接池中。
			Abandoned DB connections are removed and recycled -->
			<value>true</value>
		</parameter>
      <parameter>
			<name>removeAbandonedTimeout</name>
			<!-- 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。
			Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned.  -->
			<value>60</value>
		</parameter>
		<parameter>
			<name>logAbandoned</name>
			<!-- 将被遗弃的数据库连接的回收记入日志。
			Log a stack trace of the code which abandoned -->
			<value>false</value>
		</parameter>
      
      </ResourceParams>

  其中 Context里的内容是项目要发布需要的内容

  jdbc/epai  epai是资源名,要放在jdbc子文件中,这样形成一个完整的逻辑名,与DataSource对象关联起来

   maxActive="100" maxIdle="30" maxWait="10000"  指连接池最大连接数是100,理想连接数是30,最大等待时间是10秒

 

 3.在本应用下的WEB-INF目录下web.xml中添加如下配置

 

<resource-ref>
<description>DB Connection</description><!-- 资源描述 -->
<res-ref-name>jdbc/epai</res-ref-name><!-- 资源JNDI名称 -->
<res-type>javax.sql.DataSource</res-type><!-- 资源类型 -->
<res-auth>Container</res-auth>	
</resource-ref>	

 4.使用链接池得到链接

 

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


Context initial=(Context) new InitialContext();//创建初始上下文
DataSource ds=(DataSource)initial.looku("java:comp/env/jdbc/epai");
Connection conn=(Connection) ds.getConnection();

  
 值得注意的是:要及时关闭链接。能在任何情况下都关链接用finally

  如

 

try{
  ....
}catch(Exception e){
 .....
}
 finally{
     try{
           conn.close();//关闭链接
	}catch(Exception e){
				
	}
   }

  这样就能把链接池建好了

三、建链接池时出现的错误

    1、错误显示“Cannot load JDBC driver class 'org.git.mm.mysql.Driver

      这个问题是要么没加驱动,要么驱动名写错了。我做的时候把驱动类写错了,把“gjt”写成了这“git”。

   2、错误显示"Cannot create JDBC driver of class '' for connect URL 'null"

     Tomcat先找到web.xml下的<resource-ref>,然后再找server.xml下面的<Resource>。如果没有找到<Resource name=”JDBC/TestDB”>,或者名字错了,则会报“Cannot create JDBC driver of class '' for connect URL 'null'”错误

附件里有Jakarta-Commons Database Connection Pool 使用的组件

http://commons.apache.org也可以下

 3.Cannot load JDBC driver class 'org.gjt.mm.mysql.Driver'

 

   驱动写对了,还错的话,就是附件里的jar文件没放到tomcat/common/lib下

分享到:
评论

相关推荐

    tomcat6.0连接池配置方法详解

    ### Tomcat 6.0 连接池配置详解 在Java Web开发中,数据库连接池是一种常见的技术,用于管理数据库连接资源,提高系统的性能和稳定性。Tomcat作为一款广泛使用的Java应用服务器,提供了内置的连接池功能,方便...

    DRUID连接池的实用 配置详解

    ### DRUID连接池实用配置详解 #### DRUID简介 DRUID是阿里巴巴开源的一款数据库连接池组件,它集合了C3P0、DBCP、PROXOOL等其他数据库连接池的优点,并在此基础上增加了日志监控功能,使得用户能够更好地监控...

    Tomcat5的数据库连接池配置Tomcat5的数据库连接池配置

    ### Tomcat5的数据库连接池配置详解 #### 引言 在Java Web开发中,数据库连接池是一项关键的技术,能够显著提升应用性能和资源利用效率。对于Tomcat5这一历史较为悠久但依然在某些场景中活跃的服务器软件,正确...

    C3P0连接池配置.doc

    C3P0连接池的配置涉及到多个方面,用于优化数据库连接的创建、管理和维护。 1. **acquireIncrement**:当连接池中的连接耗尽时,C3P0会一次性尝试获取的连接数。默认值为3,这意味着当需要更多连接时,C3P0会每次...

    Hibernate Proxool连接池配置总结及常遇问题

    **Hibernate Proxool连接池配置详解** 在Java应用程序中,数据库连接池是管理数据库连接的一种高效方式,它可以显著提升系统性能,减少数据库资源的浪费。本文将深入探讨Hibernate与Proxool连接池的配置,以及在...

    tomcat连接池配置

    ### Tomcat连接池配置详解 #### 一、Tomcat连接池概述 在Java Web应用开发过程中,数据库连接是一项非常重要的资源。为了提高系统的性能和稳定性,通常会采用连接池技术来管理这些数据库连接。Tomcat作为一款广泛...

    tocmat连接池的配置

    ### Tomcat连接池配置详解 #### 配置文件:server.xml Tomcat的连接池配置主要是在`server.xml`文件中进行的。这个文件位于Tomcat安装目录下的`conf`子目录中,是Tomcat服务器的核心配置文件。在`server.xml`中,...

    proxool数据库连接池配置

    ### Proxool数据库连接池配置详解 #### 一、引言 Proxool是一个轻量级的Java数据库连接池管理工具,它可以帮助开发者更高效地管理和利用数据库连接资源。通过Proxool,可以显著减少数据库连接创建和关闭的开销,...

    Weblogic8.X+SQL SERVER2000安装及连接池配置指南

    ### Weblogic8.X+SQL SERVER2000安装及连接池配置详解 #### 环境配置与基础知识 在深入探讨Weblogic8.X与SQL SERVER2000的集成及连接池配置之前,我们首先需要了解一些基本概念和环境设置。 **Weblogic 8.X简介**...

    c3p0数据库连接池

    **c3p0数据库连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0的主要功能是管理数据库连接,通过复用已存在的连接来提高数据库访问效率,减少系统资源...

    tomcat 6.X 连接池的配置

    【标题】:“Tomcat 6.X 连接池配置详解” 【描述】:在Web应用程序中,有效地管理数据库连接对于性能和系统稳定性至关重要。Tomcat 6.X 的连接池配置是一个核心环节,它通过数据库连接池实现资源复用,提高应用...

    基于Swoole的通用连接池实现常用来作为数据库连接池

    6. **错误处理和资源管理**: 连接池还需要处理连接超时、空闲连接回收等问题,确保资源的有效利用和系统的稳定性。 7. **代码设计模式**: 可能会涉及到单例模式来确保连接池实例的唯一性,以及工厂模式来创建和管理...

    jsp连接MySQL用连接池方式步骤

    ### JSP连接MySQL使用连接池方式详解 #### 一、引言 在现代Web开发中,JSP(Java Server Pages)是一种广泛使用的服务器端技术,用于生成动态网页内容。为了提高应用程序的性能和效率,通常会采用连接池来管理与...

    weblogic+Oracle数据库连接池的配置

    ### WebLogic与Oracle数据库连接池配置详解 #### 一、WebLogic Server 7.0 + Oracle JDBC Pool/DataSource配置步骤 在进行WebLogic Server 7.0与Oracle数据库的连接池配置时,需要确保以下几个方面的正确设置: #...

    jdbc数据库连接池工程文件

    文件名为“demo”,通常包含了配置文件、数据库连接池实现类、以及演示如何在应用程序中使用连接池的代码。 **主要知识点:** 1. **JDBC基础**:JDBC是Java编程语言与数据库交互的一组接口和类,包括DriverManager...

    java数据库连接池.pdf

    8. Druid数据库连接池详解:Druid是阿里巴巴开源的数据库连接池组件,它除了基本的数据库连接池功能外,还包括监控统计、SQL解析、Web控制台等功能。Druid以其优秀的性能和强大的监控能力,在业界得到了广泛应用。 ...

    struts-hibernate-sprint开发详解 乱码问题 连接池

    总结来说,SSH框架的集成涉及到数据库连接、Hibernate配置、Spring容器设置、Struts2拦截器配置以及处理乱码和连接池问题。通过这些步骤,开发者可以构建一个完整的Java Web应用程序,实现MVC架构,有效地管理数据...

Global site tag (gtag.js) - Google Analytics