commons-pool对象池实例(一)

使用commons-pool 框架实现了一个对象池例子。将官网的例子稍微改动了一下而已。

使用的版本是:

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-pool2</artifactId>
	<version>2.4.2</version>
</dependency>

 

 

对象池实现类:

 

package com.my.pool.pooledobject;

import org.apache.commons.pool2.ObjectPool;

public class PooledStringBuffer {
	private ObjectPool<StringBuffer> pool;
	
	public PooledStringBuffer(ObjectPool<StringBuffer> pool) {
		this.pool = pool;
	}
	
	public boolean print(String data) {
		boolean flag = false;
		if(pool!=null) {
			StringBuffer buf = null;
			try{
				buf = pool.borrowObject();
				buf.append(data);
				System.out.println(buf.toString());
				return true;
			}catch(Exception e) {
				e.printStackTrace();
			}finally {
				try {
					pool.returnObject(buf);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		
		return flag;
	}
	
}

 

对象池的工厂:

package com.my.pool.pooledobject;

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

/**
 * 先创建,后打包
 *
 */
public class PooledStringBufferFactory extends BasePooledObjectFactory<StringBuffer>{

	@Override
	public StringBuffer create() throws Exception {
		return new StringBuffer();
	}

	@Override
	/**
	 * 打包成一个可以调度的对象
	 */
	public PooledObject<StringBuffer> wrap(StringBuffer obj) {
		return new DefaultPooledObject<StringBuffer>(obj);
	}
	
	@Override
	/**
	 * 归还后调用的方法
	 */
	public void passivateObject(PooledObject<StringBuffer> pooledObject) {
		pooledObject.getObject().setLength(0);
	}

}

 

主类:

package com.my.pool.main;

import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import com.my.pool.pooledobject.PooledStringBuffer;
import com.my.pool.pooledobject.PooledStringBufferFactory;

public class MainClass {
	public static void main(String[] args) {
		GenericObjectPoolConfig config = new GenericObjectPoolConfig();
		//最长等待分配时间
		config.setMaxWaitMillis(1000l);
		//池内最多对象数
		config.setMaxTotal(100);
		//池内最大空闲数目
		config.setMaxIdle(20);
		//池内最小空闲数目
		config.setMinIdle(10);
		
		GenericObjectPool<StringBuffer> pool = new GenericObjectPool<StringBuffer>(new PooledStringBufferFactory(), config);
		
		PooledStringBuffer bufUtil = new PooledStringBuffer(pool);
		bufUtil.print("OK");
	}
}

 

    对象池可以应用于数据库连接池的管理,可以重复利用对象,提高性能。实际应用中使用spring进行配置管理会更方便

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于构建Java应用程序的开发框架,而Apache Commons Pool是一个开源的对象池实现工具。在Spring Boot中整合Apache Commons Pool可以帮助我们更方便地管理对象的创建和销毁,提高系统的性能和可扩展性。 首先,我们需要在pom.xml文件中添加commons-pool2的依赖。在Spring Boot的起步依赖中已经包含了commons-pool2的支持,因此只需指定对应的版本即可。 接下来,在Spring Boot的配置文件中配置对象池的相关信息。可以使用@ConfigurationProperties注解来配置我们需要的参数,如最大对象数、最小空闲对象数、对象的生存时间等。通过这些配置,我们可以根据系统的需求来灵活地调整对象池的表现方式。 然后,在Spring Boot的配置类中将对象池配置为一个Bean。可以使用@Bean注解来声明一个对象池实例,并通过配置文件中的参数来初始化它。可以根据需要选择不同的类型的对象池,如基本对象池、通道对象池、连接池等。同时,我们还可以在@Bean注解中指定对象池的名称,以便在其他地方注入使用。 最后,在需要使用对象池的地方注入使用。可以使用@Autowired注解将对象池注入到需要使用的类中。通过调用对象池的相关方法,如borrowObject()和returnObject()方法来获取和归还对象。这样,我们就可以通过对象池来重复利用已经创建的对象,提高系统的性能和效率。 总之,通过Spring Boot整合commons-pool2,我们可以更方便地管理和使用对象池,提供了一种高效、可扩展的方式来管理对象的创建和销毁,有助于提升系统的性能和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值