`
IT少年
  • 浏览: 74193 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

apache连接池原理分析

 
阅读更多
如果需要知道为什么要用连接池,请百度



PoolableObjectFactory 从名字上看这个类是 可池化的对象工厂,顾名思义是用来生成可池化的对象的,在连接池中一个对象在使用前或使用后 可能会有不同的状态,这个接口提供了标准的接口来使对象在不同的状态间切换,activateObject() passivateObject() 这两个方法就是来是对象切换不同状态,activateObject() 是使某个对象处于初始化后的状态,是在borrowObject里从池中获取到资源后调用的,是资源处于初始化后的状态。
passivateObject( ) 是使某个对象钝化,源码里是这样解释的
Uninitialize an instance to be returned to the idle object pool.意思就是在归还到池中前使对象还原成初始化前的状态。可见这个方法是在 returnObject()的时候调用的。



ObjectPool 用来管理池中对象的借出和归还以及池的初始化工作,虽然ObjectPool管理池中的对象,但对池中管理的对象的操作,是通过PoolableObjectFactory 对外提供的接口实现。达到连接池与池中管理的对象解耦的目的。

平常使用连接池的经常用到的配置是
minIdle:池初始化是默认生成多少个空闲的资源。
maxIdle:池中最大能存贮多少个空闲的资源,主要是用来限制returnObject()时,return的资源是否返还到连接池,如果池中空闲资源达到该上限,归还的资源会被desotry()掉
maxActive:激活的最大资源数。是指同时有多少个资源可以同时使用,是在borrowObject()时 起作用,如果maxActive已经达到上限,borrowObject()就不能立马获取到请求的资源。
maxWait:是请求获取不到资源时最大等待时间。这个参数是在maxActive已经达到上限时,如果有请求要获取资源,就会进入等待,在maxWait时间内允许获取到了其他线程释放的资源,如果maxWait时间内没获取到资源,就会抛异常(不同的场景,处理情况可能不一样)
还有一些高级配置
testOnBorrow: borrowObject()时验证资源是否可用 ,需要用到PoolableObjectFactory .validate()方法。
testOnReturn: returnObject()时 验证资源是否可用 需要用到PoolableObjectFactory .validate()方法。
testWhileIdle:定时检测连接池中的资源是否可用

从上面的连接池的配置上能看出来PoolableObjectFactory提供的功能和 连接池的需求是完全符合的。
ObjectPool与 PoolableObjectFactory 这两个接口 把连接池对资源的管理和资源本身的可以提供的操作,完全解耦,使ObjectPool更加容易扩展和重用。
ObjectPool  并不需要知道池中的对象具体是什么,只知道池中的对象提供了以下几种操作
1:makeObject();
2:activateObject();
3:passivateObject();
4:validateObject();
5:destroyObject();
这几个操作已经完全能够实现连接池实现自身的需求。
ObjectPool中最主要的就是 borrowObject();和returnObject();




  • 大小: 9.2 KB
分享到:
评论

相关推荐

    DBCP连接池原理分析

    ### DBCP连接池原理分析 #### DBCP概述与版本区分 DBCP(Database Connection Pool)是由Apache组织提供的一款开源连接池实现。它能够帮助应用程序有效地管理与数据库的连接资源,通过重用预创建的数据库连接来...

    JDBC数据库连接池实现原理

    1. **选择连接池实现**:首先,我们需要选择一个合适的数据库连接池实现,如Apache的DBCP、C3P0、HikariCP或Tomcat JDBC连接池等。这些连接池库提供了管理和维护数据库连接的功能。 2. **配置连接池**:在应用的...

    连接池实现原理及效率测试

    本文将深入探讨连接池的实现原理,并通过实际测试分析其效率。 首先,我们需要理解连接池的基本概念。数据库连接池,即Database Connection Pool,是在应用服务器中维护的一组数据库连接。这些连接可以被多个客户端...

    RabbitMQ客户端连接池的原理及源码

    本文将深入探讨RabbitMQ客户端连接池的工作原理,并分析其源码,以期帮助读者理解如何有效地利用连接池优化系统性能。 连接池的基本思想是预先创建一定数量的连接并保持空闲状态,当应用需要时可以从池中获取,使用...

    mysql连接池java源码

    MySQL连接池在Java应用开发中扮演着至关重要的角色...总的来说,这个项目提供了一个学习和研究数据库连接池实现的绝佳机会,通过分析和实践,开发者可以更好地掌握数据库连接管理的技巧,提高Java应用的性能和稳定性。

    Java 连接池源码

    Java连接池是Java应用程序中管理数据库连接的一种机制,它的出现大大提高了数据库操作的性能和效率。...通过分析个人实现的源码,你可以深入学习连接池的工作原理,了解如何设计和实现高效的数据访问策略。

    数据库连接池BoneCP源码分析报告

    BoneCP是一款高效、轻量级的Java数据库连接池实现,它的源码分析对于我们理解数据库连接池的工作原理,优化数据库性能以及进行二次开发具有重要意义。 首先,我们需要了解数据库连接池的基本概念。数据库连接池是...

    java手写数据库连接池

    在实际开发中,虽然手写数据库连接池可以加深对数据库连接池原理的理解,但更常见的情况是使用成熟的连接池实现,如C3P0、Apache DBCP、HikariCP等,它们经过大量优化,提供了更好的性能和稳定性。 总的来说,理解...

    数据库连接池驱动程序包

    DBCP(Jakarta Database Connection Pool)是Apache组织提供的一个开源JDBC连接池组件,它是Commons-pool对象池和Commons-dbcp数据源的结合。DBCP的特点如下: - 基于Apache Commons的池化组件,性能相对稳定。 - ...

    java数据库连接池源码及使用示例

    在实际项目中,常见的Java连接池实现有C3P0、DBCP、HikariCP和Apache DBCP2等。每个都有其特点和优势,例如HikariCP以其高性能和低延迟著称。而手写连接池虽然能帮助理解连接池的工作原理,但在生产环境中,通常推荐...

    Java 连接池【示例】

    Apache Commons DBCP 是一个开源的连接池实现,提供了基础的数据库连接池功能。它基于Jakarta POI项目中的数据库连接池实现,简单易用,适合小型项目。 2.2 C3P0 C3P0 是一个开源的JDBC连接池,它实现了数据源和...

    java写的数据库连接池

    在Java中,有许多成熟的数据库连接池库,如Apache的DBCP、C3P0、HikariCP以及Tomcat JDBC Connection Pool等。这些库提供了完善的连接管理和优化功能,包括连接的自动获取与释放、空闲连接检测、超时控制、事务支持...

    连接池资料

    本资料集合了我在上学时学习连接池的知识,包含源码分析和PPT讲解,旨在帮助读者深入理解并掌握连接池的工作原理和应用。 首先,我们需要理解连接池的基本工作流程。当一个应用程序需要与数据库交互时,它不再直接...

    数据库的连接池

    2. DBCP (Apache BasicDataSource):Apache组织提供的一个JDBC连接池实现,基于Jakarta POI项目。 3. HikariCP:一个高性能的数据库连接池,被誉为“最快的JDBC连接池”。 4. Druid:阿里巴巴开源的数据库连接池,...

    DB_Conn_Pool.rar_创建数据库_数据库 连接池_数据库连接池_连接池

    1. 选择连接池实现:有许多成熟的数据库连接池实现,如Apache的DBCP、C3P0,以及HikariCP等。这些组件提供了丰富的配置选项,可以根据项目需求选择合适的连接池。 2. 配置连接池:配置包括数据库驱动类、URL、用户名...

    数据库连接池-连接的关闭内幕

    #### 数据库连接池的工作原理 数据库连接池通常包含以下关键组件: 1. **连接工厂**:负责创建新的数据库连接。 2. **连接池管理器**:管理可用连接的数量,包括最大连接数、最小连接数等。 3. **空闲连接**:当前...

    数据库连接池~~~数据库连接池

    - **Apache DBCP**:Apache提供的数据库连接池,简单易用,适合小型项目。 - **HikariCP**:被誉为最快的JDBC连接池,设计目标是极低的延迟和优秀的性能。 - **Druid**:阿里巴巴开源的数据库连接池,功能强大,...

Global site tag (gtag.js) - Google Analytics