- 浏览: 1597844 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
jsrgzhangzhiyong:
关于null值的转换还是感觉不太友好,就像 mapstruct ...
我也造了个轮子:BeanMapping(属性拷贝) -
he037:
a417930422 写道引用使用EPHEMERAL会引出一个 ...
基于zookeeper的分布式lock实现 -
seancheer:
qianshangding 写道首先节点启动后,尝试读取本地的 ...
zookeeper学习记录三(session,watcher,persit机制) -
雪夜归人:
您好,我想咨询一下,开源的canal都能支持mysql的哪些版 ...
Canal BinlogChange(mysql5.6) -
zhoudengyun:
copy 一份做记录,后续学习,请知悉
阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
背景
前段时间研究了下dbcp的一些源码,发现dbcp对common pools依赖比较严重,基本就是基于pool的扩展接口实现的。所以也就顺便看了下pools的源码。
总体结构
common pools的代码总体结构来说是比较简单的。
先上一个类图:
核心接口类:
- ObjectPool 对象池
- ObjectPoolFactory 池的维护工厂
- PoolableObjectFactory 可池化对象的维护工厂
- KeyedObjectPool 基于kety的对象池
- KeyedObjectPoolFactory
- KeyedPoolableObjectFactory
说明: ObjectPool和KeyedObjectPool基本接口都是一致的,唯一不同的就是KeyedObjectPool是基于key做为键值,其对应的存储结构就是 Map<Object , List<Object>>, 每次根据key定位List<objct>的value后,再进行池化管理。
几个pools的实现类:
1. GenericObjectPool: 通用的对象池处理类,维护池的大小,空闲链接等等。 针对对象的makeObject,destoryObject等都是委托给PoolableObjectFactory进行处理。
基本参数和dbcp的配置参数一样,可以参考: http://agapple.iteye.com/admin/blogs/772507
关注几个特别的参数:
- _lifo : 采用的列表管理模式,采用先进先出or后进先出。 默认是先进先出,底层具体的池对象储存是通过CursorableLinkedList。
- _softMinEvictableIdleTimeMillis : 软性idle空闲管理。默认是-1。 相比于_minEvictableIdleTimeMillis,系统默认优先处理_minEvictableIdleTimeMillis空闲管理机制,除此主要的区别就是处理空闲链接时,soft会考虑当前的池大小是否满足 > minIdle数。
- _timeBetweenEvictionRunsMillis : Evict管理线程的运行时间,默认-1。也就是说默认不运行,注意如果要使用idle空闲管理必须设置该值,否则没效果。
2. StackObjectPool : 基于stack堆栈概念的对象池,对象池的borrow或者return都是符合stack的先进先出弹栈的管理,相比于GenericObjectPool,它只有maxIdle(最大空闲数), maxTotal(最大资源数)管理,暂时还未想到特定的应用场景,因为觉得GenericObjectPool的功能基本可以覆盖StackObjectPool,只要适当的调整参数。
3. SoftReferenceObjectPool : 看名字就应该猜到是基于SoftReference进行对象持有的pool,在内存不足时可以主动的释放pool object对象, 通过ReferenceQueue获取object对象需要被清除的时间点。至于SoftReference可以看下理解 Java 的 GC 与 幽灵引用
4. GenericKeyedObjectPool: 区别于GenericObjectPool,主要是该pool池,针对每个资源都有自己特定的域,就是一个对应的key。每个key下可以有一组object。 maxTotal是针对所有的key下的object之和,而非单个。
如何实现自定义的pool
首先以dbcp为例,介绍其相关扩展点。
说明:
1. dbcp整个连接池的管理是使用GenericObjectPool
2. dbcp这里通过扩展实现自定义的PoolableObjectFactory , 用于定义如何创建/销毁/校验一个datasource等。
3. 使用的statement cache利用的是GenericKeyedObjectPool,因为statement cache是基于key进行statement管理的,所以比较适合。但目前在使用statement cache会出现一些异常情况,慎用。
4. PoolingConnection实现了statement cache对应池对象的创建/销毁。 同时在datasource的执行close,同时需要清理整个statement cache pool的close动作,避免出现资源泄漏。
实际demo:
实现一个memcache client的连接池代码
1. 实现一个PoolableObjectFactory接口,提供创建/销毁/校验的方法
public class MemcachedPoolableSocketFactory implements PoolableObjectFactory { ....... public MemcachedPoolableSocketFactory(String host, int port, int connectedTimeout){ this.host = host; this.port = port; this.connectedTimeout = connectedTimeout; } @Override public Object makeObject() throws Exception { return new SockIO(host, port, connectedTimeout); } @Override public void destroyObject(Object obj) throws Exception { if (obj instanceof SockIO) { ((SockIO) obj).close(); } } @Override public boolean validateObject(Object obj) { if (obj instanceof SockIO) { SockIO sock = (SockIO) obj; try { sock.getOut().write("version \r\n".getBytes()); sock.getOut().flush(); } catch (IOException e) { e.printStackTrace(); } } return true; } ...... }
2. 创建SocketPool类,用于管理pool
public class MemcachedSocketPool { private GenericObjectPool sockPool = null; private int maxActive = 50; private int minIdle = 1; private int maxIdle = 50; private int maxWait = 1000; public MemcachedSocketPool(String host, int port){ sockPool = new GenericObjectPool(); sockPool.setMaxActive(maxActive); sockPool.setMaxIdle(maxIdle); sockPool.setMinIdle(minIdle); sockPool.setMaxWait(maxWait); sockPool.setTestOnBorrow(false); sockPool.setTestOnReturn(false); sockPool.setTimeBetweenEvictionRunsMillis(10 * 1000); sockPool.setNumTestsPerEvictionRun(maxActive + maxIdle); sockPool.setMinEvictableIdleTimeMillis(30 * 60 * 1000); sockPool.setTestWhileIdle(true); sockPool.setFactory(new MemcachedPoolableSocketFactory(host, port, 1000)); } public SockIO createSocket() { assert sockPool != null; try { return (SockIO) sockPool.borrowObject(); } catch (Exception e) { } return null; } }
3. 客户端端使用
MemcachedSocketPool pool = new MemcachedSocketPool("10.20.156.37", 6000); SockIO sock = pool.createSocket(); sock.write(cmd.getBytes()); sock.flush();
使用common-pools后,实现一个自己的连接池也是相对比较单了
评论
jude,一款java写的,有对应的免费版. 一般linux下用的挺多的
发表评论
-
yugong QuickStart
2016-03-05 01:52 0几点说明 a. 数据迁移的方案可参见设计文档,oracl ... -
阿里巴巴开源项目: 阿里巴巴去Oracle数据迁移同步工具
2016-03-05 18:29 6546背景 08年左右,阿里巴巴开始尝试MySQL的相关 ... -
愚公performance
2016-03-02 17:29 0性能测试 全量测试 场景1 (单主键, ... -
yugong AdminGuide
2016-03-02 16:40 0环境要求 操作系统 数据库 迁移方案 部署 ... -
Tddl_hint
2014-01-27 13:52 0背景 工作原理 Hint格式 direct模 ... -
tddl5分库规则
2014-01-26 14:41 0背景 工作原理 构建语法树 元数据 基于 ... -
tddl5优化器
2014-01-22 15:12 0背景 工作原理 构建语法树 元数据 抽象语 ... -
Canal BinlogChange(mariadb5/10)
2014-01-20 17:25 4627背景 先前开源了一个 ... -
asynload quickstart
2013-10-08 22:49 0几点说明: 1. asyncload是做为一个j ... -
网友文档贡献
2013-09-18 15:50 01. Otter源代码解析系列 链接:http://e ... -
Manager配置介绍
2013-09-16 13:00 0通道配置说明 多种同步方式配置 a. 单向同步 ... -
canal&otter FAQ
2013-09-05 17:30 0常见问题 1. canal和 ... -
阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)
2013-08-22 16:48 40476项目背景 阿里巴巴B2B公司,因为业务的特性 ... -
Otter AdminGuide
2013-08-19 11:06 0几点说明 otter系统自带了manager,所以简化了一 ... -
Otter高可用性
2013-08-17 23:41 0基本需求 网络不可靠,异地机房尤为明显. man ... -
Otter数据一致性
2013-08-17 23:39 0技术选型分析 需要处理一致性的业务场景: 多地修改 ( ... -
Otter扩展性
2013-08-17 22:20 0扩展性定义 按照实现不同,可分为两类: 数据处理自定 ... -
Otter双向回环控制
2013-08-17 21:37 0基本需求 支持mysql/oracle的异构数据库的双 ... -
Otter调度模型
2013-08-17 20:13 0背景 在介绍调度模型之前,首先了解一下otter系统要解 ... -
Otter Manager介绍
2013-08-16 11:16 0背景 otter4.0发布至 ...
相关推荐
大华无插件播放项目111
内容概要:本文详细介绍了Oracle 19c数据库的备份恢复和导入导出操作。首先概述了基本命令,然后分别讲述了三种工作方式(交互式、命令行、参数文件)和三种模式(表、用户、全库)。接着介绍了高级选项,如分割成多个文件、增量导出/导入、以SYSDBA进行导出/导入、表空间传输等。最后讨论了优化技巧,包括加快导出和导入速度的方法。还解决了一些常见问题,如字符集问题和版本问题。 适用人群:Oracle数据库管理员和相关技术人员。 使用场景及目标:适合在日常数据库管理和维护中进行数据备份、恢复、导入和导出操作,提高数据安全性和管理效率。 其他说明:文章内容丰富,涉及多种实用技巧,适用于不同场景下的具体操作,有助于提升工作效率。
基于Python Flask开发的旅游酒店大数据可视化项目,可以直接运行。 操作步骤: 1. 解压缩项目文件 2. 使用 pycharm打开项目 3. 运行项目中的app.py文件 注意:需要确保项目的Flask Python相关的环境已经搭建完成。
Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告,个人高分设计项目、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的学生和需要项目实战练习的学习者。 基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告个人高分设计项目、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的学生和需要项目实战练习的学习者。 个人高分设计项目、经导师指导并认可通过的高分设
棉花检测20-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar棉-V2释放 ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 它包括406张图像。 以可可格式注释棉花。 将以下预处理应用于每个图像: 没有应用图像增强技术。
项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!
windwos环境下python 3.11系列64位安装包,仅推荐个人学习、开发、娱乐或者测试环境下使用。
使用精品酒销售管理系统的用户分管理员和用户两个角色的权限子模块。 管理员所能使用的功能主要有:主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等。 用户可以实现主页、个人中心、我的收藏管理、订单管理等。 前台首页可以实现商品信息、新闻资讯、我的、跳转到后台、购物车等。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
Video_2024-12-18_000023.wmv
ppt最終版asasaadd
计算机图形学期末考试
springboot-基于SpringBootVue的家具商城系统设计与实现.zip
PenTablet_5.2.4-5.zip
考虑了企业管理者的实际工作环境和需求,最终将人力资源系统划分为5个部分,即登录模块、组织发展模块、员工团队模块、合同管理模块、党建管理模块。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
QT音乐播放器MP3 可点击播放可上一首下一首可调节音量 可暂停可上传音乐
椅子检测6-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar对象检测实验室-V1 2023-08-21 2:28 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括997张图像。 对象以可可格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 应用以下扩展来创建每个源图像的3个版本: *将盐和胡椒噪声应用于10%的像素
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
Altas PF拧紧枪 OP协议,开发协议