`
茴香豆
  • 浏览: 131058 次
  • 性别: 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下

分享到:
评论

相关推荐

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    8.4 jdbc数据源和连接池 299 8.5 mysql对中文的处理 302 8.6 小结 302 第9章 会话跟踪 303 9.1 用于会话跟踪的技术 303 9.1.1 ssl会话 304 9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    8.4 jdbc数据源和连接池 299 8.5 mysql对中文的处理 302 8.6 小结 302 第9章 会话跟踪 303 9.1 用于会话跟踪的技术 303 9.1.1 ssl会话 304 9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    8.4 jdbc数据源和连接池 299 8.5 mysql对中文的处理 302 8.6 小结 302 第9章 会话跟踪 303 9.1 用于会话跟踪的技术 303 9.1.1 ssl会话 304 9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话...

    SpringBoot集成Druid+MariaDB+Lombok+Mybatis-Plus详解

    Druid:是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况 MariaDB:是最流行的开源关系型数据库之一。它由 MySQL...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    8.4 jdbc数据源和连接池 299 8.5 mysql对中文的处理 302 8.6 小结 302 第9章 会话跟踪 303 9.1 用于会话跟踪的技术 303 9.1.1 ssl会话 304 9.1.2 cookies 304 9.1.3 url重写 305 9.2 java servlet api的会话...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...

    Windows系统进程详解

    如果这些过程时正常的,系统就关掉了。如果发生了什么不可预料的事情,smss.exe就会让系统停止响应(就是挂起)。 spoolsv.exe 这个进程是不可以从任务管理器中关掉的。 缓冲(spooler)服务是管理缓冲池中的打印...

    开涛高可用高并发-亿级流量核心技术

    12.1.1 DBCP连接池配置 228 12.1.2 DBCP配置建议 233 12.1.3 数据库驱动超时实现 234 12.1.4 连接池使用的一些建议 235 12.2 HttpClient连接池 236 12.2.1 HttpClient 4.5.2配置 236 12.2.2 HttpClient连接池源码...

    深入Java Servlet网络编程

    2 使连接池对所有Servlet可用 7. 2. 3 外罩连接池类 第8章 在数据库中存取图像 8. 1 在数据库中存入图像数据 8. 2 提取和显示图像信息 第9章 Servlet链 9. 1 编写Servlet链 9. 2 触发Servlet链 第10章 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    04 线程的调用以及join方法 05 setDaemon方法和继承式调用.baiduyun.downloading 05 setDaemon方法和继承式调用 第34章 01 上节知识回顾 02 并发并行与同步异步的概念 03 GIL的概念 04 同步锁 05 递归锁 06 同步...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    4.5 slave_exec_mode参数可自动处理同步复制错误 120 4.6 如何验证主从数据一致 121 4.7 binlog_ignore_db引起的同步复制故障 123 4.8 mysql5.5.19/20同步一个bug 124 4.9 恢复slave从机上的某几张表的简要方法...

    C程序范例宝典(基础代码详解)

    实例187 错误处理 268 实例188 合并两个文件信息 270 实例189 统计文件内容 271 6.3 文件的创建、查找及删除 272 实例190 创建文件 273 实例191 创建临时文件 274 实例192 查找文件 275 实例193 ...

    Java开发技术大全 电子版

    14.4.5编写事件处理程序的基本方法454 14.4.6响应窗口关闭事件处理示例454 14.4.7事件监听器接口和适配器类456 14.4.8作为参数的事件类456 14.4.9处理多个事件的例子463 14.5Swing组件的特性467 14.5.1Swing...

    亮剑.NET深入体验与实战精要2

    1.6.5 错误异常处理方法 70 本章常见技术面试题 76 常见面试技巧之面试前的准备 76 本章小结 77 第2章 细节决定成败 79 2.1 Equals()和运算符==的区别 80 2.2 const和readonly的区别 82 2.3 private、protected、...

    亮剑.NET深入体验与实战精要3

    1.6.5 错误异常处理方法 70 本章常见技术面试题 76 常见面试技巧之面试前的准备 76 本章小结 77 第2章 细节决定成败 79 2.1 Equals()和运算符==的区别 80 2.2 const和readonly的区别 82 2.3 private、protected、...

    VMware_View问题汇总指南-201302

    VMware_View问题汇总指南 ... 25、配置VMware View Client for Linux 1.5版本支持PCoIP和RDP连接 ..................... 22 24、 为Teradici Zero Client 4.0升级固件版本后提示:The supplied certificate is not..

    building_storage_networks_chsSAN存储区域网络 .rar

    SAN方案必须提供自管理能力,尤其在错误恢复、数据可用性以及性能管理方面,纠错和失败恢复也是企业存储的关键问题,RAID使存储管理员从由于硬盘失败而引起的数据丢失的担心中解脱出来。自动的负载平衡减轻了对存储...

Global site tag (gtag.js) - Google Analytics