`
annegu
  • 浏览: 99630 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

关于连接池

阅读更多
    数据库连接的建立与关闭对于一个应用来说是耗费系统资源的操作。传统的数据库连接是通过DriveManager来实现的,每个数据库连接对象都对应了一个实际的物理数据库连接,每次都要新建一个数据库连接,并且在使用完毕之后要负责关闭这个连接,这样不仅造成了系统资源的浪费,而且也不利于连接资源的管理。
 
    数据库连接池的作用就是创建一个数据库连接的缓冲池,应用程序启动的时候会预先新建一定数量的连接,放入这个缓冲池中待用,当应用程序需要一个数据库连接的时候,它可以从这个缓冲池中取出一个现成的连接来使用,在使用完毕之后再归还给这个缓冲池。这样的话,数据库连接的资源就能很好的被管理起来了。

    当连接池中的连接都被用光的时候,如果这个时候还需要空闲的数据库连接的话,可以再新建立一定数量的连接,放入缓冲池中以提供应用程序的需求。当然,这个连接的数量并不是可以无限制的扩大的,我们可以通过设定连接池中的最大连接数来防止系统无限制的建立与数据库的连接。

    如果这个时候连接池中的连接全都在使用中,并且当前连接池中的连接已经达到了所允许的最大连接数,就等待一段事件,如果在等待的时间内有连接被释放出来,那么就可以被分配给当前正在等待的用户,如果等待时间超过了设置的最大等待时间也一直没有线程归还连接,那么当前的请求连接的线程将返回null,抛出异常,这个异常最终将层层往上,一直到servlet处被处理。

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

    Spring可以用来管理数据库连接。
    Spring包含了两个数据源的实现类包:DBCP与C3P0。

1、DBCP的数据库连接池配置:
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost/ad?useUnicode=true&amp;characterEncoding=GBK&amp;jdbcCompliantTruncation=false"/>
		<property name="username" value="root"/>
		<property name="password" value="root"/>				
		<!-- 连接池中初始化的连接数量 -->
		<property name="initialSize" value="1"/>		
		<!-- 最小连接数量 -->
		<property name="minActive" value="1"/>
		<!-- 最大连接数量 -->
		<property name="maxActive" value="20"/>		
		<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
		<property name="maxWait" value="1000"/>		
		<!-- 最大空闲连接 -->
		<property name="maxIdle" value="20"/>		
		<!-- 最小空闲连接 -->
		<property name="minIdle" value="5"/>		
		<property name="defaultAutoCommit" value="false"></property>
	</bean>


    数据库连接池在初始化的时候会创建一定数量的数据库连接,如果设置了rmoveAbandoned=true,那么在使用的过程中,系统会对无效的数据库连接进行回收。但是连接池将保证一定会持有一定数量的数据库连接,无论这些数据库连接是否被使用,都不会被回收,这个就是minActive。因此,如果应用程序对数据库连接的使用量不大,那么minActive太大的话将造成大量的数据库连接资源都被闲置,浪费。

    maxActive最大连接数是连接池能申请的最大连接数,如果对数据库连接的请求超过这个数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。

2、C3P0的数据库连接池配置
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost/ad?useUnicode=true&amp;characterEncoding=GBK&amp;jdbcCompliantTruncation=false"/>
		<property name="username" value="root"/>
		<property name="password" value="root"/>
				
		<!-- 连接池中保留的最小连接数 -->
		<property name="minPoolSize" value="1"/>		
		<!-- 连接池中保留的最大连接数 -->
		<property name="maxPoolSize" value="20"/>		
		<!-- 最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
		<property name="maxIdleTime" value="1800"/>		
		<!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
		<property name="acquireIncrement" value="3"/>		
		<!-- 最大的PreparedStatement的数量 -->
		<property name="maxStatements" value="1000"/>		
		<!-- 每60秒检查所有连接池中的空闲连接。Default: 0 -->
		<property name="idleConnectionTestPeriod" value="0"/>		
		<!-- 定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
		<property name="acquireRetryAttempts" value="30"/>		
		<property name="breakAfterAcquireFailure" value="true"/>
		<property name="testConnectionOnCheckout" value="false"/>
	</bean>


    注意的是C3P0中有个参数为”acquireIncrement”,这个参数表示的意义是:当连接池中的没有空闲的连接的时候,如果有新的数据库连接请求的话,C3P0会一次性新建3个数据库连接放入缓冲池中。
分享到:
评论
1 楼 toko_yuki 2010-06-24  
感谢分享,不过那个应该是DriverManager吧

相关推荐

    连接池案例 连接池案例

    在IT行业中,数据库连接池是优化数据库访问性能和资源管理的重要技术。连接池的基本思想是重用已建立的数据库连接,避免频繁创建和销毁连接带来的性能开销。本篇文章将深入探讨连接池的概念、工作原理以及如何在实际...

    kafka生产者连接池

    为了优化性能和提高效率,开发人员常常会利用连接池技术来管理Kafka生产者的连接。本文将深入探讨"Kafka生产者连接池"的概念、实现原理以及它如何提升系统性能。 Kafka生产者连接池是一种资源复用机制,它允许多个...

    okhttp中连接池实现

    它的核心特性之一就是连接池(Connection Pool),它在提高网络性能和减少延迟方面起到了关键作用。本文将深入探讨OkHttp中的连接池实现,包括连接对象的添加、移除机制以及其工作原理。 首先,我们需要了解什么是...

    Tomcat连接池配置.doc

    Tomcat 连接池配置详解 Tomcat 连接池配置是 Web 应用程序中一个非常重要的组件,它负责管理和维护数据库连接,确保数据访问的高速和安全性。本文将详细介绍 Tomcat 连接池配置的步骤和原理,帮助读者快速掌握 ...

    C# 数据库连接池 C# 数据库连接池

    数据库连接池是数据库管理中的一个重要概念,它在C#编程中扮演着优化数据库操作的关键角色。C#数据库连接池是一种管理数据库连接的技术,通过复用已存在的连接而不是每次请求时都创建新的连接,从而提高数据库操作的...

    delphi ADO连接池

    心想既然.net、java里面都有不错的连接池,那delphi应该也有吧,可是找了老半天都没能找到比较理想的。最后网上找到一个ADO的连接池实现...DbHelper.pas为为了方便访问数据库操作的实用单元,里面有关于连接池的用法。

    java ftp连接池

    Java FTP连接池是一种用于管理FTP(文件传输协议)连接的资源池,它的主要目标是提高应用程序的性能和效率。在传统的FTP操作中,每次需要连接到FTP服务器时都会创建一个新的连接,这会消耗大量时间和系统资源。而...

    tomcat连接池与阿里Druid连接池

    Tomcat 连接池和阿里 Druid 连接池的配置和比较 Tomcat 连接池是一种基于 Java 的数据库连接池实现,提供了高效、可靠的数据库连接管理。阿里 Druid 连接池是阿里巴巴开发的开源连接池,提供了高性能、可靠的数据库...

    Mongodb连接池for java

    在标签中,“MongoDB”是数据库的名字,“Mongo连接池”指的是针对MongoDB数据库的连接池,“连接池”是数据库连接管理的一个通用概念,适用于各种数据库系统。 在压缩包“mongodb_pool”中,可能包含了以下内容: ...

    连接池学习笔记

    这篇“连接池学习笔记”涵盖了关于连接池的基本概念、工作原理以及常见的数据库连接池实现,旨在帮助读者深入理解这一工具。以下是对该主题的详细阐述: 一、连接池的概念 连接池是一种对象池设计模式的具体应用,...

    C#高效数据库连接池源码

    数据库连接池是数据库管理中的重要概念,特别是在高并发和大数据量的应用场景下,它能显著提升性能并降低系统资源消耗。在C#编程环境中,我们可以使用自定义的数据库连接池来实现这一功能。本篇文章将深入探讨“C#...

    各个web服务器安装文档,及连接池的配置

    本压缩包包含了三个主流的Web服务器——Tomcat、WebLogic和WebSphere的安装文档以及关于连接池的配置指南,这对于理解和管理这些服务器的日常运维工作至关重要。 首先,让我们来详细探讨Tomcat。Tomcat是一款开源的...

    java socket连接池 实现

    Java Socket 连接池实现是提高网络应用性能和效率的关键技术之一。在高并发的网络环境中,频繁地创建和销毁Socket连接会导致大量的系统资源浪费,影响整体性能。为了解决这个问题,开发人员通常会使用连接池来管理和...

    socket 客户端连接池实现

    Socket客户端连接池是一种在分布式系统或网络编程中提高性能和效率的重要技术。它允许应用程序预先创建并维护一组可重用的Socket连接,从而避免了每次通信时建立新连接的开销。本文将深入探讨Socket客户端连接池的...

    java 数据库 连接池驱动.rar

    Java数据库连接池驱动是Java应用程序在访问数据库时用于优化资源管理的一种技术。它提供了一种在多个数据库操作之间重用数据库连接的方式,从而避免了频繁创建和关闭连接带来的性能开销。连接池的核心思想是池化资源...

    c# mysql数据库连接池实现

    在.NET Core 2.1框架下,可以使用.NET Standard库来实现高效、优化的数据库连接管理,特别是通过连接池来提高性能。本文将深入探讨如何在C#中使用MySQL数据库连接池。 首先,我们需要了解什么是数据库连接池。...

    Java连接SAP系统所用的JCo连接池的配置和使用

    "Java连接SAP系统所用的JCo连接池的配置和使用" Java连接SAP系统所用的JCo连接池的配置和使用是指在Java应用程序中使用JCo连接池来连接SAP R3系统的技术。JCo(Java Connector)是SAP提供的一种Java API,用于连接...

    java socket连接池

    Java Socket连接池是一种优化网络通信性能的技术,它允许应用程序复用已经建立的Socket连接,从而减少因频繁创建和销毁Socket连接而产生的开销。在高并发的服务器环境中,Socket连接池能够有效地提升系统效率和响应...

    数据库连接池技术详解

    对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 在较为完备的数据库连接池实现中,可根据...

Global site tag (gtag.js) - Google Analytics