`
IT少年
  • 浏览: 73015 次
  • 性别: 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
分享到:
评论

相关推荐

    精通并发与netty视频教程(2018)视频教程

    19_Apache Thrift原理与架构解析 20_通过Apache Thrift实现Java与Python的RPC调用 21_gRPC深入详解 22_gRPC实践 23_Gradle Wrapper在Gradle项目构建中的最佳实践 24_gRPC整合Gradle与代码生成 25_gRPC通信示例与JVM...

    精通并发与 netty 视频教程(2018)视频教程

    Protobuf完整实例详解 15_Protobuf集成Netty与多协议消息传 递 16_Protobuf多协议消息支援与工程最佳实践 17_Protobuf使用最佳实践与Apache Thrift介绍 18_Apache Thrift应用详解与实例剖析 19_Apache Thrift原理与...

    精通并发与netty 无加密视频

    第66讲:Netty常量池实现及ChannelOption与Attribute作用分析 第67讲:Channel与ChannelHandler及ChannelHandlerContext之间的关系分析 第68讲:Netty核心四大组件关系与构建方式深度解读 第69讲:Netty初始化...

    单点登录源码

    Druid | 数据库连接池 | [https://github.com/alibaba/druid](https://github.com/alibaba/druid) FluentValidator | 校验框架 | [https://github.com/neoremind/fluent-validator]...

    JAVA上百实例源码以及开源项目源代码

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    JAVA上百实例源码以及开源项目

    1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...

    Java虚拟机

    全书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。第一部分从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。...

    MYSQL中文手册

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置...

    python入门到高级全栈工程师培训 第3期 附课件代码

    07 apache服务 08 samba服务 第9章 01 Python开发系列课程概要 02 Python作业要求以及博客 03 编程语言介绍 04 Python种类介绍 05 Python安装以及环境变量的操作 06 Python初识以及变量 07 Python条件语句和基本...

    MySQL 5.1参考手册中文版

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置...

    mysql官方中文参考手册

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 ...

    MySQL 5.1参考手册

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 ...

    java 面试题 总结

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 14、Overload...

    MySQL5.1参考手册官方简体中文版

    3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 ...

    mysql5.1中文手册

    与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. ...

    超级有影响力霸气的Java面试题大全文档

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

Global site tag (gtag.js) - Google Analytics