一、连接池概述
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个
应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时
间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些
数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接
数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
目前常用的连接池有:C3P0、DBCP、Proxool
网上的评价是:
C3P0比较耗费资源,效率方面可能要低一点。
DBCP在实践中存在BUG,在某些种情会产生很多空连接不能释放,Hibernate3.0已经放弃了对其的支持。
Proxool的负面评价较少,现在比较推荐它,而且它还提供即时监控连接池状态的功能,便于发现连接泄漏的情况。
1、Proxool配置如下:
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="alias" value="spring-proxool" />
<property name="driver" value="${jdbc.driverClassName}" />
<property name="driverUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 最少保持的空闲连接数 (默认2个) -->
<property name="prototypeCount" value="${proxool.prototypeCount}" />
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒) -->
<property name="houseKeepingSleepTime" value="${proxool.hourseKeepingSleepTime}" />
<!-- 最大活动时间(超过此时间线程将被kill,默认为5分钟) -->
<property name="maximumActiveTime" value="${proxool.maximumActiveTime}" />
<!-- 连接最长时间(默认为4个小时) -->
<property name="maximumConnectionLifetime" value="${proxool.maximumConnectionLifetime}" />
<!-- 最大连接数 (默认5个) -->
<property name="maximumConnectionCount" value="${proxool.maximumConnectionCount}" />
<!-- 最小连接数 (默认2个) -->
<property name="minimumConnectionCount" value="${proxool.minimumConnectionCount}" />
<!-- 测试的SQL执行语句 -->
<property name="houseKeepingTestSql" value="${proxool.houseKeepingTestSql}" />
<!--一次可以建立最大连接数 -->
<property name="simultaneousBuildThrottle" value="${proxool.simultaneous-build-throttle}"/>
<!-- 执行之前是否测试 -->
<property name="testBeforeUse" value="true" />
<!-- -->
<property name="trace" value="true" />
<!-- -->
<property name="verbose" value="true" />
</bean> 然后注入到sessionFactory中
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="proxoolDataSource"/>
</bean>
2、C3P0的配置:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value=”com.mysql.jdbc.Driver” />
<property name="jdbcUrl" value=”jdbc:mysql://192.168.3.110:3306/DBName” />
<property name="user" value=”root” />
<property name="password" value=”root” />
<!--连接池中保留的最小连接数。-->
<property name="minPoolSize" value=”5” />
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value=”30” />
<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize" value=”10” />
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value=”60” />
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value=”5” />
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements" value=”0” />
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod" value=”60” />
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts" value=”30” />
<!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
<property name="breakAfterAcquireFailure" value=”true” />
<!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。Default: false -->
<property name="testConnectionOnCheckout" value=”30” />
</bean>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>com/xh/hibernate/vo/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">true</prop>
</props>
</property>
</bean>
分享到:
相关推荐
本资源包包含了两种常见的数据库连接池实现——C3P0和Druid,适用于Java开发环境。 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要特点包括: 1. **连接池...
Spring Boot默认支持几种流行的数据库连接池,如HikariCP、Druid、Tomcat JDBC等。这些连接池都提供了高效的连接管理和资源优化。HikariCP以其高性能和低内存占用被广泛采用,而Druid则以其丰富的监控功能受到青睐。...
它还支持数据库连接池的集成。 6. **Spring ORM**: `spring-orm.jar`提供对ORM框架如Hibernate、JPA的支持,帮助开发者在Spring应用中整合各种ORM解决方案。 7. **Spring Web**: 包括`spring-web.jar`和`spring-...
在IT行业中,数据库连接池是优化数据库访问性能和资源管理的重要工具。Druid是一个非常流行的Java连接池实现,它不仅提供了高效、稳定的数据库连接管理,还内置了强大的监控功能。这篇博客“初探Druid连接池之三——...
《Spring Boot整合Mybatis与Druid数据库连接池的实践详解》 在当今的Java开发领域,Spring Boot以其简洁、高效的特点成为了主流的框架选择。它极大地简化了项目的配置和启动流程,使得开发者能够更加专注于业务逻辑...
你需要在Spring配置文件中定义一个SessionFactoryBean,设置相应的Hibernate配置属性,如hibernate.dialect(针对Firebird的方言)、hibernate.connection.driver_class(Firebird JDBC驱动类)以及数据库连接信息。...
首先,我们来看C3PO(Comprehensive3rdPartyPooling),这是一个基于Apache Commons DBCP的数据库连接池实现,具有更好的性能和稳定性。C3PO与Spring框架的整合通常涉及以下步骤: 1. 导入必要的依赖库,包括c3p0-...
在Java开发领域,Spring框架是应用最广泛的轻量级框架之一,它提供了全面的编程和配置模型,使得企业级应用...同时,理解数据库连接池的工作原理和Spring的依赖注入机制,对于优化数据库操作和提升应用性能至关重要。
在实际应用中,为了提高系统的响应速度和资源利用率,通常会采用数据库连接池技术来管理JDBC连接,从而减少创建和销毁连接所带来的性能开销。 #### 三、关键技术解析 **1. JDBC数据源** - **定义**:JDBC (Java ...
通过阅读和理解代码,可以了解如何使用SQL语句进行数据操作,如何处理用户请求,以及如何设计数据库连接池等。 5. **文档**:相关文档应包含系统需求分析、数据库设计文档、程序设计说明和用户手册等。这些文档可以...
本文主要讲解了基于 Spring Boot 搭建应用开发框架的基础架构,包括项目结构、Spring Boot 配置、MyBatis 集成、日志及全局异常处理、Redis 缓存、Swagger 支持 API 文档、Druid 数据库连接池等内容,并对 Spring ...
该压缩包“JDBC连接池jar包__C3P0.zip”包含的是C3P0连接池的特定版本——c3p0-0.9.1.2-jdk1.3.jar,这是一个用于Java应用程序的数据源管理工具,特别适用于在IDEA(IntelliJ IDEA)环境中与MySQL数据库进行交互。...
然而,在实际开发中,为了提高代码的可维护性和效率,建议使用如JDBC连接池、Spring框架等高级技术来管理数据库连接,减少资源消耗,增强程序性能。此外,对于数据库连接字符串、用户名和密码等敏感信息,应避免硬...
【毕业设计】SSH框架实战项目...Struts2+Spring+Hibernate+MySQL5.x+proxool数据库连接池 (3)主要功能: 用户:注册,登录,修改密码,注销 商品:添加新商品,查看在拍商品,出价 出价记录:提交出价记录,成交
在这个示例中,我们将以一个常见且高效的连接池——HikariCP为例进行讲解。 首先,我们需要理解数据源连接池的作用。数据库连接创建和销毁的过程是昂贵的,频繁进行会导致系统性能下降。数据源连接池通过预先创建并...
Proxool是一种轻量级的数据库连接池,因其较低的资源消耗和良好的监控功能而受到推荐。在Spring中配置Proxool连接池,我们需要创建一个名为`proxool_dataSource`的bean,并设置相应的属性,如驱动类、URL、用户和...
- 数据库连接池:通过连接池管理数据库连接,提高效率并减少资源消耗。 - ORM(Object-Relational Mapping):如Hibernate、MyBatis等,将对象模型映射到关系型数据库,简化数据库操作。 5. 软件工程方法 - 需求...
Proxool是Apache软件基金会的一个项目,它提供了一个轻量级、高效的数据库连接池解决方案,能有效地管理和优化数据库连接资源,提高应用系统的性能和稳定性。 在描述中提到了三个特定的jar包: 1. **proxool-cglib....
在"spring-mybatis-struts2-master"项目中,可以看到Spring的配置文件(如:applicationContext.xml),其中定义了Bean的实例化规则,包括数据库连接池、SqlSessionFactory等关键组件。 二、MyBatis框架 MyBatis是...
数据库连接池预先创建并管理一定数量的数据库连接,避免了频繁创建和销毁连接的开销,提高了系统的运行效率。 **5. Spring Cache抽象** Spring Cache抽象层提供了一种通用的缓存解决方案,可以集成不同的缓存实现,...