解析Apache Commons Pool

Apache Commons Pool是一个对象池实现,能够管理可以共享和重用实例的Java对象,从而降低内存消耗并提高资源利用率。在这篇文章中,我们将深入研究这个强大的工具。

一、commons-pool2

commons-pool2是Apache Commons Pool的最新版本,具有很多改进和新功能。可以使用以下代码块引入它:

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

ObjectPool<MyObject> pool = new GenericObjectPool<>(new MyObjectFactory());

这段代码创建了一个MyObject对象池,并使用MyObjectFactory创建对象。

要从池中取出对象和将对象归还池中,请使用以下代码:

MyObject obj = pool.borrowObject();
//使用obj进行操作
pool.returnObject(obj);

池对象的方便之处在于,它们可以在需要时自动创建和释放。这有利于提高应用程序的性能和可扩展性。

二、commons-pool2空闲时间

commons-pool2可以用来管理一批重量级的资源,如数据库连接。但是,这些资源有时需要一段时间才能启动或恢复。如果资源在太长时间内处于空闲状态,那么它们可能会被关闭或释放,导致应用程序出现错误。为了解决这个问题,commons-pool2引入了idleTime属性,它指定对象在池中保持空闲的最长时间。

以下代码使用3秒的idleTime属性创建了一个MyObject对象池:

GenericObjectPoolConfig<MyObject> config = new GenericObjectPoolConfig<>(); 
config.setMaxIdle(5);
config.setMaxTotal(10);
config.setMinIdle(3);
config.setMaxWaitMillis(5000);
config.setTestOnBorrow(true);
config.setMinEvictableIdleTimeMillis(3000);      // 设置连接空闲时间超时为3秒 

ObjectPool<MyObject> pool = new GenericObjectPool<>(new MyObjectFactory(), config);

这段代码将池的最大总数设置为10,最小空闲数设置为3,最大空闲数设置为5,并为借用对象设置了测试和最大等待时间。还将最小可逐出空闲连接时间设置为3秒。

三、commons-pool2使用

commons-pool2提供了很多有用的配置选项,可以根据应用程序的所需进行优化。例如,可以设置池的最大等待时间或在池中创建时进行自定义初始化。以下是一些示例代码段:

1. 限制总连接数:

config.setMaxTotal(10);

2. 配置连接等待时间:

config.setMaxWaitMillis(5000);

3. 自定义对象创建:

public class MyObjectFactory extends BasePooledObjectFactory<MyObject> {
    public MyObject create() throws Exception {
        MyObject obj = new MyObject();
        //自定义初始化
        return obj;
    }

    public PooledObject<MyObject> wrap(MyObject obj) {
        return new DefaultPooledObject<>(obj);
    }
}

这个示例中实现了create方法,用于自定义MyObject对象的初始化,从而提高资源利用效率。

四、commons-pool2 key选取

在某些情况下,池的每个对象都需要不同的键。例如,池可能需要管理连接池,每个连接都需要不同的密码。为了达到这个目的,可以使用KeyedPooledObjectFactory,该工厂使用外部键键入单独的子池。

以下是一些使用key选取子池的示例代码:

class MyKeyedPooledObjectFactory extends BaseKeyedPooledObjectFactory<String, Connection> {
    public Connection create(String key) throws Exception {
        Connection conn = createConnection(key);
        return conn;
    } 

    public PooledObject<Connection> makeObject(String key) throws Exception {
        return wrap(create(key));
    }
 
    public void destroyObject(String key, PooledObject<Connection> object) throws Exception {
        object.getObject().close();
    }

    public PooledObject<Connection> wrap(Connection conn) {
        return new DefaultPooledObject<>(conn);
    }
}

KeyedObjectPool<String, Connection> pool = new GenericKeyedObjectPool<>(new MyKeyedPooledObjectFactory());

这个示例使用了一个MyKeyedPooledObjectFactory工厂,它针对不同的“键”创建自定义的连接对象。创建出来的对象将使用预先定义的键作为索引,以便使用方便的方式从它们中获取。可以将多个连接作为子池存储在对象池中,从而保证控制并发。

总结

Apache Commons Pool是一个强大的Java库,可以有效地管理对象的生存周期,从而提高资源的使用效率。commons-pool2具有灵活的配置选项和扩展性,可以处理各种应用程序的需求。通过仔细分析和实践,可以为其优化提供更好的性能和可靠性。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/294090.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-26 13:15
下一篇 2024-12-26 13:15

相关推荐

  • Apache配置Python环境

    Apache是一款流行的Web服务器软件,事实上,很多时候我们需要在Web服务器上使用Python程序做为数据处理和前端网页开发语言,这时候,我们就需要在Apache中配置Pyth…

    编程 2025-04-28
  • Apache伪静态配置Java

    本文将会从多个角度阐述如何在Apache中正确伪装Java应用程序,实现URL的静态化,提高网站的SEO优化和性能。以下是相关的配置和代码实例。 一、RewriteEngine的配…

    编程 2025-04-27
  • 如何解决org.apache.tomcat.util.net.nioendpoint套接字处理器出错?

    org.apache.tomcat.util.net.nioendpoint套接字处理器一般是指Tomcat服务器的套接字处理器,在Tomcat服务器中占据着非常重要的位置。如果出…

    编程 2025-04-27
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Apache ShardingSphere详解

    Apache ShardingSphere是一款开源的分布式数据库中间件,致力于为用户提供一站式的数据治理解决方案。通过ShardingSphere,可以方便地实现数据分片、读写分…

    编程 2025-04-24
  • 深入理解Go Sync.Pool

    一、Sync.Pool简介 Sync.Pool是Go语言内置的一个线程安全的对象池,它用于存储那些被需要时再分配、不再需要时立即释放的临时对象。 Sync.Pool在Go1.3版本…

    编程 2025-04-23
  • Apache Commons StringUtils详解

    一、字符串操作 1、startsWith()、endsWith()方法 //判断字符串开头是否是abc StringUtils.startsWith(“abcde”, “abc”)…

    编程 2025-04-22
  • Apache Maven安装与配置

    一、安装Apache Maven Apache Maven是一个强大的软件构建工具,它能够管理项目依赖和构建过程。Maven有一个庞大的用户群体和生态系统,很多Java项目都在使用…

    编程 2025-04-13
  • 深度解析Apache Shiro Subject

    一、Shiro Subject的简介 Apache Shiro是一个功能强大且易于使用的Java安全框架,提供身份验证(认证)、授权、加密和会话管理等功能,可以轻松地为Web、移动…

    编程 2025-04-12
  • 深入理解mysql buffer pool

    一、什么是mysql buffer pool MySQL是一种关系型数据库管理系统,其主要分为三个层次:连接层、存储引擎层和文件系统。 而MySQL中的buffer pool是连接…

    编程 2025-04-12

发表回复

登录后才能评论