common pool2 mysql_连接池Commons Pool2的使用
客户端这边,如果每次都临时建立一个新的连接,那么连接的开销非常大。
业内常用的连接池组件是 Commons Pool2---版本 2.4.2
packageservice.pool;
importorg.apache.commons.pool2.BasePooledObjectFactory;
importorg.apache.commons.pool2.PooledObject;
importorg.apache.commons.pool2.impl.DefaultPooledObject;
importorg.apache.thrift.transport.TSocket;
publicclassMyPoolFactoryextendsBasePooledObjectFactory {
privateStringip;
privateintport;
publicMyPoolFactory(Stringstring,inti) {
ip=string;
port=i;
}
@Override
publicTSocket create()throwsException {
// 初始化一个对象
TSocketts=newTSocket(ip,port);
ts.open();
returnts;
}
@Override
publicPooledObject wrap(TSocketts) {
// 默认操作
returnnewDefaultPooledObject(ts);
}
/// 下面是5个生命周期
//makeObject默认
@Override
publicvoiddestroyObject(PooledObjectp)throwsException {
TSocketts=p.getObject();
ts.close();
}
@Override
publicbooleanvalidateObject(PooledObjectp) {
TSocketts=p.getObject();
returnts.isOpen();
通过发送紧急数据解决此问题,Thrift服务器端不要开启对应的设置,经过测试OK.
然后,后来又想到,我自己写一个MyTSocket 继承TSocket,然后一旦业务线程拿到连接池给我的一个MyTSocket(注意:此时可能socket无效)
然后业务线程使用过程中发现有异常,则设置MyTSocket的一个属性为false,连接池检测时兼顾这个属性就可以了。
最后发现这个还不能彻底解决问题,jedis采用的是业务探测:ping-pong,这个是redis自己的协议
对于其它的服务器怎么办?我们查了百度,采用的办法是:
publicbooleanvalidateObject(PooledObjectp) {
MyTSockett=p.getObject();
Sockets=t.getSocket();
booleanclosed=s.isClosed();
booleanconnected=s.isConnected();
booleanoutputShutdown=s.isOutputShutdown();
booleaninputShutdown=s.isInputShutdown();
booleanurgentFlag=false;
try{
s.sendUrgentData(0xFF); //在这里
}catch(IOExceptione) {
}
returnurgentFlag&&connected&& !closed&& !inputShutdown&& !outputShutdown&&t.isAlive();
}
}
@Override
publicvoidactivateObject(PooledObjectp)throwsException {
// 返回给调用方时,做一些额外的操作
}
/**
* When an object is returned to the pool, clear the buffer.
*/
@Override
publicvoidpassivateObject(PooledObjecttSocket) {
// 返回到pool时,做一些额外的操作
}
}
============================
具体使用时
// 设置传输通道,对于非阻塞服务,需要使用TFramedTransport,它将数据分块发送
GenericObjectPoolConfigpoolConfig=newGenericObjectPoolConfig();
poolConfig.setBlockWhenExhausted(true);
poolConfig.setMaxWaitMillis(100);
poolConfig.setLifo(false);
poolConfig.setMaxIdle(50); 最大空闲连接数
poolConfig.setMinIdle(50);// 最小空闲连接数
poolConfig.setMaxTotal(100);// 整个池的最大值,最大连接数
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnCreate(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(false);
GenericObjectPoolpools=newGenericObjectPool(newMyPoolFactory("127.0.0.1", 7911),poolConfig);
// 具体使用代码
TSocketts= (TSocket)pools.borrowObject();
pools.returnObject(ts);
common pool2 mysql_连接池Commons Pool2的使用相关推荐
- 通过连接池无法连接mysql_连接池无法链接数据库
这是出错提示信息:typeExceptionreportmessagedescriptionTheserverencounteredaninternalerror()thatpreventeditfr ...
- Java hdfs连接池_Java使用连接池管理Hdfs连接
记录一下Java API 连接hadoop操作hdfs的实现流程(使用连接池管理). 以前做过这方面的开发,本来以为不会有什么问题,但是做的还是坑坑巴巴,内心有些懊恼,记录下这烦人的过程,警示自己切莫 ...
- JAVA怎么连接华为的HDFS系统_Java使用连接池管理Hdfs连接
记录一下Java API 连接hadoop操作hdfs的实现流程(使用连接池管理). 以前做过这方面的开发,本来以为不会有什么问题,但是做的还是坑坑巴巴,内心有些懊恼,记录下这烦人的过程,警示自己切莫 ...
- 自己写的grpc简单连接池,基于common pool2
17年的时候写的证券的项目,当时交易端是另外一批同事开发的,他们强烈要求用grpc,当时这个东西还不那么成熟,在网上也搜索不到比较完美的第三方的连接池搭配使用,索性就自己写了一个,因为之前thrift ...
- common pool2 mysql_用common-pool自定义资源池
以前认为连接池,线程池这些东西很高端.因为出了问题之后,总是有人说这个连接池/线程线的配置不对嘛,应该..... 今天学习了下,这个池到底应该怎么设计.发现apache的common-pool早就思考 ...
- commons.pool2 对象池的使用
commons.pool2 对象池的使用 ? 1 2 3 4 5 <dependency> <groupId>org.apache.commons</groupI ...
- java.lang.NoClassDefFoundError: org/apache/commons/pool2/PooledObjectFactory
用GenericObjectPool来连接postgres数据库,在pom.xml中也加入了依赖 <!-- https://mvnrepository.com/artifact/org.apac ...
- jndi连接池链接mysql_使用容器提供的数据库连接池--JNDI用法
现在,数据库的连接没有用到连接池几乎很少很少,每个项目组都可能有自己的数据库连接池组件,各容器提供商也提供了各自的数据库连接池,下面介绍一下tomcat和weblogic使用JNDI的数据库连接管理. ...
- mysql连接池_数据库技术:数据库连接池,Commons DbUtils,批处理,元数据
Database Connection Pool Introduction to Database Connection Pool 实际开发中"获得连接"或"释放资源&q ...
最新文章
- Mysql-学习笔记(==》常用函数 八)
- Spring的核心思想,总结得非常好!
- javascript foreach中获取数组下标/index
- Linux 创建交换(swap)分区
- 安卓学习 之 ContentResolver内容提供者(七)
- android java 调试快捷键_Android Studio 代码页跳界面 /java和XML快速切换技巧
- 天池 在线编程 卡牌游戏(01背包)
- linux Postfix + dovecot + extmail + extman + mysql
- 【数据结构与算法】森林版并查集V1.0的Java实现
- loadrunner如何监控linux,以及重点指标分析
- 理解 Android 消息机制
- 腾讯云推出首款自研服务器星星海;苹果新款Mac Pro整套配齐超30万;Fedora 31稳定版发布|极客头条...
- SSE3指令集系列----数据加载与算术运算指令
- 毛哥的快乐生活(1) 猫哥与毛哥
- 电脑桌面图标变成长方形咋办_为什么我的界面上的图标全部被一个长方形的图标覆盖了?...
- 王倩兮金碧山水作品《绿水青山就是金山银山》
- GFS 区域风场解析问题
- 纯原生javascript下拉框表单美化实例教程
- android+读书笔记
- 《那些年啊,那些事——一个程序员的奋斗史》十三
热门文章
- php获取全部post_php post获取所有提交
- html javascript 音频、视频、 mp3 、mp4 的播放、暂停、重新播放、获取音频时长、视频自动全屏播放
- 【文本分类】基于类信息的TF-IDF权重分析与改进
- 语义分割--DeconvNet--Learning Deconvolution Network for Semantic Segmentation
- c51语言的标准库函的头文件,C51编程中头文件的使用
- 用虚拟机学linux,虚拟机上学习Linux运维?学linux有什么用
- mfc 访问局域网mysql_数据库操作:MFC连接与MYSQL
- 尖峰 mysql 源码方向_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图...
- execel公式 java工具,MyExcel(Excel Java工具包) v3.0.0下载
- pycharm使用Djiago创建第一个web项目