如果需要知道为什么要用连接池,请百度
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(Database Connection Pool)是由Apache组织提供的一款开源连接池实现。它能够帮助应用程序有效地管理与数据库的连接资源,通过重用预创建的数据库连接来...
1. **选择连接池实现**:首先,我们需要选择一个合适的数据库连接池实现,如Apache的DBCP、C3P0、HikariCP或Tomcat JDBC连接池等。这些连接池库提供了管理和维护数据库连接的功能。 2. **配置连接池**:在应用的...
本文将深入探讨连接池的实现原理,并通过实际测试分析其效率。 首先,我们需要理解连接池的基本概念。数据库连接池,即Database Connection Pool,是在应用服务器中维护的一组数据库连接。这些连接可以被多个客户端...
本文将深入探讨RabbitMQ客户端连接池的工作原理,并分析其源码,以期帮助读者理解如何有效地利用连接池优化系统性能。 连接池的基本思想是预先创建一定数量的连接并保持空闲状态,当应用需要时可以从池中获取,使用...
MySQL连接池在Java应用开发中扮演着至关重要的角色...总的来说,这个项目提供了一个学习和研究数据库连接池实现的绝佳机会,通过分析和实践,开发者可以更好地掌握数据库连接管理的技巧,提高Java应用的性能和稳定性。
#### 三、Java连接池内部原理 连接池内部通常包括以下几个核心组件: 1. **连接工厂**:负责创建新的数据库连接。 2. **连接池管理器**:管理连接的生命周期,包括创建、分配、回收等操作。 3. **连接对象**:表示一...
Java连接池是Java应用程序中管理数据库连接的一种机制,它的出现大大提高了数据库操作的性能和效率。...通过分析个人实现的源码,你可以深入学习连接池的工作原理,了解如何设计和实现高效的数据访问策略。
BoneCP是一款高效、轻量级的Java数据库连接池实现,它的源码分析对于我们理解数据库连接池的工作原理,优化数据库性能以及进行二次开发具有重要意义。 首先,我们需要了解数据库连接池的基本概念。数据库连接池是...
在实际开发中,虽然手写数据库连接池可以加深对数据库连接池原理的理解,但更常见的情况是使用成熟的连接池实现,如C3P0、Apache DBCP、HikariCP等,它们经过大量优化,提供了更好的性能和稳定性。 总的来说,理解...
DBCP(Jakarta Database Connection Pool)是Apache组织提供的一个开源JDBC连接池组件,它是Commons-pool对象池和Commons-dbcp数据源的结合。DBCP的特点如下: - 基于Apache Commons的池化组件,性能相对稳定。 - ...
在实际项目中,常见的Java连接池实现有C3P0、DBCP、HikariCP和Apache DBCP2等。每个都有其特点和优势,例如HikariCP以其高性能和低延迟著称。而手写连接池虽然能帮助理解连接池的工作原理,但在生产环境中,通常推荐...
Apache Commons DBCP 是一个开源的连接池实现,提供了基础的数据库连接池功能。它基于Jakarta POI项目中的数据库连接池实现,简单易用,适合小型项目。 2.2 C3P0 C3P0 是一个开源的JDBC连接池,它实现了数据源和...
#### 二、连接池内部原理分析 连接池的核心在于管理一定数量的数据库连接,并确保这些连接的有效性和可用性。一般而言,连接池会维护以下几个关键属性: 1. **初始连接数**(`initialConnections`):连接池启动时...
在Java中,有许多成熟的数据库连接池库,如Apache的DBCP、C3P0、HikariCP以及Tomcat JDBC Connection Pool等。这些库提供了完善的连接管理和优化功能,包括连接的自动获取与释放、空闲连接检测、超时控制、事务支持...
本资料集合了我在上学时学习连接池的知识,包含源码分析和PPT讲解,旨在帮助读者深入理解并掌握连接池的工作原理和应用。 首先,我们需要理解连接池的基本工作流程。当一个应用程序需要与数据库交互时,它不再直接...
2. DBCP (Apache BasicDataSource):Apache组织提供的一个JDBC连接池实现,基于Jakarta POI项目。 3. HikariCP:一个高性能的数据库连接池,被誉为“最快的JDBC连接池”。 4. Druid:阿里巴巴开源的数据库连接池,...
1. 选择连接池实现:有许多成熟的数据库连接池实现,如Apache的DBCP、C3P0,以及HikariCP等。这些组件提供了丰富的配置选项,可以根据项目需求选择合适的连接池。 2. 配置连接池:配置包括数据库驱动类、URL、用户名...
#### 数据库连接池的工作原理 数据库连接池通常包含以下关键组件: 1. **连接工厂**:负责创建新的数据库连接。 2. **连接池管理器**:管理可用连接的数量,包括最大连接数、最小连接数等。 3. **空闲连接**:当前...
- **Apache DBCP**:Apache提供的数据库连接池,简单易用,适合小型项目。 - **HikariCP**:被誉为最快的JDBC连接池,设计目标是极低的延迟和优秀的性能。 - **Druid**:阿里巴巴开源的数据库连接池,功能强大,...