以下三种连接都是以连接MySQl为例。
<!-- JDBC驱动程序 -->
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</property> <!-- 数据库用户名 -->
<property name="connection.username">root</property> <!-- 数据库密码 -->
<property name="connection.password">8888</property>
上面的一段配置,在c3p0和dbcp中,都是必需的,因为hibernate会根据上述的配置来生成connections,再交给c3p0或dbcp管理.但是,proxool则不能,虽然说服文档上说proxool也可以和hibernate结合,但我按照官方文档上的说明怎么配也出错,而且,到了 sun和hibernat有的官方网站上问了几天,都没有一个人回复。后来我只能让proxool自身来生成连接,这在下面再讲。
1 C3P0
只需在hibernate.cfg.xml中加入
<property name="c3p0.min_size">5</property>
<property name="c3p0.max_size">30</property>
<property name="c3p0.time_out">1800</property>
<property name="c3p0.max_statement">50</property>
还有在classespath中加入c3p0-0.8.4.5.jar
2 dbcp
在hibernate.cfg.xml中加入
<property name="dbcp.maxActive">100</property>
<property name="dbcp.whenExhaustedAction">1</property>
<property name="dbcp.maxWait">60000</property>
<property name="dbcp.maxIdle">10</property>
<property name="dbcp.ps.maxActive">100</property>
<property name="dbcp.ps.whenExhaustedAction">1</property>
<property name="dbcp.ps.maxWait">60000</property>
<property name="dbcp.ps.maxIdle">10</property>
还有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar.
3 proxool
在hibernate.cfg.xml中加入
<property name="proxool.pool_alias">pool1</property>
<property name="proxool.xml">ProxoolConf.xml</property>
<property name="connection.provider_class">net.sf.hibernate.connection.ProxoolConnectionProvider</property>
然后,在和hibernate.cfg.xml同一个目录下,加一个ProxoolConf.xml文件,内容为
<?xml version="1.0" encoding="utf-8"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>pool1</alias>
<!--proxool只能管理由自己产生的连接-->
<driver-url>jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</driver-url>
<driver-class>org.gjt.mm.mysql.Driver</driver-class>
<driver-properties>
<property name="user" value="root"/>
<property name="password" value="8888"/>
</driver-properties>
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
<maximum-new-connections>20</maximum-new-connections>
<!-- 最少保持的空闲连接数-->
<prototype-count>5</prototype-count>
<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定-->
<maximum-connection-count>100</maximum-connection-count>
<!-- 最小连接数-->
<minimum-connection-count>10</minimum-connection-count>
</proxool>
</something-else-entirely>
并在classespath中加入proxool-0.8.3.jar
结论:
由于在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp有 BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。我不知是否在dbcp最新版本中解决了这个问题,我以前在一个访问量不大的项目中用过dbcp,运行了一年多都没出现问题。不过在网上的确也有不少网友指出dbcp在大型的应用中会出现不稳定的情况。所以在真相未经证实的情况下,我觉得对dbcp持慎重的态度。
至于c3p0,有评论说它的算法不是最优的,而且,我在matrix中,见到有网友做了一个实验,在同一项目中分别用了几个常用的连接池,然后测试其性能,发现c3p0占用资源比较大,效率也不高。
所以,基于上述原因,我才花两晚的时间去研究proxool的配置,proxool不少行家推荐使用,而且暂时来说,是负面评价是最少的一个。在三星中也有项目是用proxool的。
分享到:
相关推荐
这个数据连接池源码包含了许多预设的方法,使得开发者可以轻松地管理和使用数据库连接,无需从头构建复杂的数据库连接管理逻辑。DBUtils 的设计目标是高效、便捷和易于集成,它适用于各种数据库系统,因为它的兼容性...
【数据库连接池】是软件开发中用于管理数据库连接的一种技术,旨在提高数据库操作的效率和资源利用率。在传统的JDBC数据库编程中,每个数据库操作都需要建立、使用和关闭数据库连接,这种模式存在明显的性能瓶颈和...
**JDBC连接池&JDBCTemplate** 在Java Web开发中,JDBC(Java Database Connectivity)是用于连接Java应用程序和数据库的标准接口。然而,直接使用JDBC进行数据库操作存在一些效率问题,比如频繁创建和关闭数据库...
数据库连接池是现代Java应用程序中不可或缺的部分,它有效地管理和优化了数据库资源的使用。在Java中,连接池通过复用已存在的数据库连接来减少创建和销毁连接的开销,从而提高系统性能。本文将深入探讨数据库连接池...
例如,Apache的DBCP、C3P0、HikariCP和Tomcat的JDBC连接池都是常用的数据库连接池实现。 在Java应用中,配置数据库连接池通常包括以下步骤: 1. 添加对应连接池的依赖库到项目中。 2. 配置连接池的属性,如最大连接...
标题中的“Hibernate连接池的三种配置方式”指的是Hibernate框架中常用的三种数据库连接池实现,分别是:DBCP (BasicDataSource),C3P0,以及Proxool。这些连接池的目的是管理和优化数据库连接的创建、分配和回收,...
《基于JDBC的数据库连接池技术研究与应用》 在当今互联网时代,Web应用程序的开发已经从传统的桌面应用转向了基于B/S架构的模式。Java的Servlet+JSP+JavaBean技术因其跨平台、安全、高效和可移植的特性,成为了开发...
德鲁伊(Druid)是阿里巴巴开源的一款高效、强大的数据库连接池组件,版本1.1.0提供了稳定且性能优异的服务。它不仅是一个连接池,还包含了一个SQL解析器、监控统计功能,以及一系列的扩展点,使得Druid能够更好地...
"连接池与Spring、Hibernate结合"这个主题涉及到的是如何有效地管理和复用数据库连接,以提高应用程序的效率和响应速度。这里我们将深入探讨连接池的概念,Spring框架中的数据源配置,以及Hibernate的集成,以及它们...
在本文中,我们将探讨如何使用Java的动态代理来实现数据库连接池,从而解决传统连接池设计中的耦合度问题和资源管理问题。 首先,数据库连接池是应用程序管理数据库连接的一种高效方式。它通过复用已建立的数据库...
转国外的数据库三层源码(带连接池),仅测试D7成功。 代码精简易懂,供大家学习研究。 TCP AdoServer/Client is a multi-tier tool to design a a thin client application that connects to an application server...
**Proxool连接池详解** 在Java开发中,数据库连接管理是系统性能优化的重要环节。Proxool是一个轻量级的、开源的JDBC连接池,它为应用程序提供了高效的数据库连接管理。标题中的"proxool连接池"和描述中的"tomcat...
### 使用Java NIO技术实现的异步连接池 #### 异步连接池的诞生背景及意义 在现代软件开发特别是Web应用开发过程中,为了提升应用性能和服务质量,开发者经常使用常连接和连接池技术。传统的连接池技术在面对单一...
在Java项目开发中,数据库连接池是不可或缺的一部分,它能够有效地管理数据库连接,提高系统性能。本篇文章将探讨几种常见的数据库连接池的使用比较,包括Proxool、DBCP、C3P0,并通过配置文件(如`proxool.xml`、`...
数据库连接池是现代Java应用程序中不可或缺的组件,它在提高性能和优化资源管理方面起着关键作用。在Java世界里,有两个非常著名的数据库连接池实现:Druid和C3P0。下面我们将深入探讨这两个连接池的技术细节以及...
数据源连接池是Java应用程序中一个非常重要的概念,它能够有效地管理数据库连接,提高系统性能,减少资源浪费。本示例将介绍如何使用c3p0和JNDI(jtds组件)来实现数据库连接池。 首先,我们来看c3p0组件。c3p0是一...
**DBCP数据库连接池详解** 在Java开发中,数据库连接池是不可或缺的一部分,它提高了数据库操作的性能和效率。DBCP(Database Connection Pool)是由Apache软件基金会提供的一个开源的数据库连接池实现,它是...
本资源包提供了一系列的实例,旨在帮助学习者掌握Oracle数据库与Java Web开发中的关键概念,包括数据库连接池、中文乱码处理、留言板功能以及过滤器技术。 首先,我们来看"数据库连接池"。数据库连接池是一种管理...
数据库连接池在初始化时会创建一定数量的数据库连接,这些连接在池中待用,当应用程序需要访问数据库时,不再直接创建新的连接,而是从连接池中获取一个已存在的连接,使用完毕后归还给连接池而不是关闭,从而提高了...