连接池Commons Pool2的使用

客户端这边,如果每次都临时建立一个新的连接,那么连接的开销非常大。

业内常用的连接池组件是 Commons Pool2---版本 2.4.2

==================具体代码如下:[http://commons.apache.org/proper/commons-pool/examples.html]

package service.pool;

import org.apache.commons.pool2.BasePooledObjectFactory;

import org.apache.commons.pool2.PooledObject;

import org.apache.commons.pool2.impl.DefaultPooledObject;

import org.apache.thrift.transport.TSocket;

public class MyPoolFactory extends BasePooledObjectFactory<TSocket> {

private String ip;

private int port;

public MyPoolFactory(String string, int i) {

ip = string;

port = i;

}

@Override

public TSocket create() throws Exception {

// 初始化一个对象

TSocket ts = new TSocket(ip, port);

ts.open();

return ts;

}

@Override

public PooledObject<TSocket> wrap(TSocket ts) {

// 默认操作

return new DefaultPooledObject<TSocket>(ts);

}

/////////////////////////// 下面是5个生命周期

//makeObject默认

@Override

public void destroyObject(PooledObject<TSocket> p) throws Exception {

TSocket ts = p.getObject();

ts.close();

}

@Override

public boolean validateObject(PooledObject<TSocket> p) {

TSocket ts = p.getObject();

return ts.isOpen();

}

@Override

public void activateObject(PooledObject<TSocket> p) throws Exception {

// 返回给调用方时,做一些额外的操作

}

/**

* When an object is returned to the pool, clear the buffer.

*/

@Override

public void passivateObject(PooledObject<TSocket> tSocket) {

// 返回到pool时,做一些额外的操作

}

}

============================

具体使用时

// 设置传输通道,对于非阻塞服务,需要使用TFramedTransport,它将数据分块发送

GenericObjectPool pools = new GenericObjectPool<TSocket>(new MyPoolFactory("127.0.0.1", 7911));

GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();

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);

pools.setConfig(poolConfig);

// 具体使用代码

TSocket ts = (TSocket) pools.borrowObject();

pools.returnObject(ts);

时间: 2024-08-25 16:41:19

连接池Commons Pool2的使用的相关文章

Apache Commons Pool2连接池代码

2013年,Apache Commons Pool 2.0 发布,这是一个完全重写的对象池的实现.实现的代码和原来差异很大,原来的一些例子就不能用了.按照上面的例子,用pool2的类和方法重写下. ApacheCommons Pool 2.0 代码如下: package test.ffm83.commons.pool; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.

从commons pool2到池

转载请注明:http://blog.csdn.net/HEL_WOR/article/details/51224388 池该如何理解?我们经常提到的数据库连接池,线程池,对象池. 池这个概念,在计算机里,应该如何用代码来描述? 在网页上可以找到很多关于数据库连接池的描述,实现DataSource接口,用一个链表或者只要能保存数据的容器将事先创建好的连接保存起来,一个连接池就成型了,在需要使用的时候去容器里取出一个连接,使用完毕后归还这个连接,如果想要重写close方法让连接归还到容器中而不是被关

Apache Commons pool 简介和pool连接池代码

在实际中工作,我们经常遇到需要连接池的地方,特别是数据库连接池. 我们为什么需要池呢?因为这些资源的创建,都很消耗资源.因此,我们使用一个对象池,里面预先创建了一些资源对象.当我们需要时,从池中取出对象,而不需要时,把对象返回池中.这样就可以提高代码运行的效率. Apache Commons Pool(http://commons.apache.org/pool/)为我们提供了很方便的接口来实现对象池.我们唯一需要实现的就是如何产生对象,而不用去考虑一堆多线程问题. 2013年,Apache C

commons.pool2 对象池的使用

? 1 2 3 4 5 <dependency>     <groupId>org.apache.commons</groupId>     <artifactId>commons-pool2</artifactId>     <version>2.3</version> </dependency> 池对象工厂 PooledObjectFactory和池对象 DefaultPooledObject 先了解个概念

使用DBCP连接池对连接进行管理

//需要引用的jar包有4个,分别是commons-pool2-2.4.2.jar.commons-dbcp2-2.1.1.jar.mysql-connector-java-5.1.42-bin.jar.commons-logging-1.2.jar //缺少一个都会报错(Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/pool2/PooledObjectFactory)意思是找

Apache Commons Pool2 源码分析 | Apache Commons Pool2 Source Code Analysis

Apache Commons Pool实现了对象池的功能.定义了对象的生成.销毁.激活.钝化等操作及其状态转换,并提供几个默认的对象池实现.在讲述其实现原理前,先提一下其中有几个重要的对象: PooledObject(池对象). PooledObjectFactory(池对象工厂). Object Pool(对象池). 下面分别详细讲解它们的实现. PooledObject(池对象) 用于封装对象(如:线程.数据库连接.TCP连接),将其包裹成可被池管理的对象.提供了两个默认的池对象实现: De

redis连接池 jedis-2.9.0.jar+commons-pool2-2.4.2.jar

java使用Redis连接池  jar包为 jedis-2.9.0.jar+commons-pool2-2.4.2.jar 1 package com.test; 2 3 import redis.clients.jedis.Jedis; 4 import redis.clients.jedis.JedisPool; 5 import redis.clients.jedis.JedisPoolConfig; 6 7 public class RedisUtil { 8 //Redis服务器IP

ftp连接池客户端

package com.scenetec.isv.utils.ftp.core; import com.scenetec.isv.utils.ftp.config.FtpClientProperties;import lombok.extern.slf4j.Slf4j;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPReply;import org.apache.commons.po

JDBC-数据连接池的使用

数据库连接池(connection pool) 在昨天的练习中每一次练习都需要与数据库建立连接,完成时断开连接,然而当处理的数据量特别的时候,就很耗费时间.降低效率,今天我们学习使用连接池,将连接放在连接池中,需要使用的时候从中取出,使用完毕放回池中并不是断开连接. 数据库连接池的基本思想就是为数据库连接建立一个"缓冲池".预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再放回去. 数据库连接池在初始化时将创建一定数