三分钟让你学会如何使用 apache-common-pool2 创建自己的资源池

(一)common-pools2的基本使用 这里为了理解关键使用步骤做个最简化的common-pools2 要实现commons-pool2框架,组要有三部分组成 1 ,ObjectPool:简单说这就是池,传说中的对象池,实现对象存取和状态管理的:如线程池,数据库连接池都可以用这个 2,PooledObject:这个是池化对象,简单说就是你想囤积的对象,专业术语叫池化对象。这个最后要放到ObjectPool对象里面去。同时也添加了一些附加... 阅读详情

需要 commons-pool2-2.3.jar 包,大家可以去官网下载

1:定义资源对象,即保存在资源池中的资源

public class User {
    //姓名
    private String name;
    //年龄
    private int age;
    //身高
    private String height;

    public User(String name, int age, String height) {
        super();
        this.name = name;
        this.age = age;
        this.height = height;
    }

    @Override
    public String toString() {
        StringBuilder str = new StringBuilder(super.toString());
        str.append(" ");
        str.append("name:" + name);
        str.append(",age:" + age);
        str.append(",height:" + height);
        return str.toString();
    }

}

2:创建一个poolfactory 实现接口 org.apache.commons.pool2.PooledObjectFactory

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

public class LpPoolFactory implements PooledObjectFactory {

/**
 * 功能描述:激活资源对象
 * 
 * 什么时候会调用此方法
 * 1:从资源池中获取资源的时候
 * 2:资源回收线程,回收资源的时候,根据配置的 testWhileIdle 参数,判断 是否执行 factory.activateObject()方法,true 执行,false 不执行
 * @param arg0 
 */
@Override
public void activateObject(PooledObject<User> arg0) throws Exception {
    System.out.println("activate Object");
}

@Override
public void destroyObject(PooledObject<User> arg0) throws Exception {
    System.out.println("destroy Object");
    User user = arg0.getObject();
    user = null;
}

@Override
public PooledObject<User> makeObject() throws Exception {
    System.out.println("make Object");
    User user = new User(Thread.currentThread().getName(), 26, "178cm");
    return new DefaultPooledObject<User>(user);
}

/**
 * 功能描述:钝化资源对象
 * 
 * 什么时候会调用此方法
 * 1:将资源返还给资源池时,调用此方法。
 */
@Override
public void passivateObject(PooledObject<User> arg0) throws Exception {
    System.out.println("passivate Object");
}

/**
 * 功能描述:判断资源对象是否有效,有效返回 true,无效返回 false
 * 
 * 什么时候会调用此方法
 * 1:从资源池中获取资源的时候,参数 testOnBorrow 或者 testOnCreate 中有一个 配置 为 true 时,则调用  factory.validateObject() 方法
 * 2:将资源返还给资源池的时候,参数 testOnReturn,配置为 true 时,调用此方法
 * 3:资源回收线程,回收资源的时候,参数 testWhileIdle,配置为 true 时,调用此方法
 */
@Override
public boolean validateObject(PooledObject<User> arg0) {
    System.out.println("validate Object");
    return true;
}

}

3:对一个资源池来说,应该有一些参数配置,apache-common-pool2的参数配置都在 org.apache.commons.pool2.impl.GenericObjectPoolConfig 中

点击查看

4:创建池,并从池中获取资源对象,使用完后,将资源对象返还给资源池

使用池的第一种方式
//使用默认的 config配置
LpPoolFactory factory = new LpPoolFactory();
GenericObjectPool<User> objectPool = new GenericObjectPool<User>(factory);

使用池的第二种方式
//使用 自己的  config配置
LpPoolFactory factory = new LpPoolFactory();
GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setMinIdle(2);
GenericObjectPool<User> objectPool = new GenericObjectPool<User>(factory,poolConfig);

测试代码 以及 测试结果

public static void main(String[] args) throws Exception{
    //工厂
    LpPoolFactory factory = new LpPoolFactory();
    //资源池配置
    GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
    poolConfig.setMinIdle(2);
    //创建资源池
    GenericObjectPool<User> objectPool = new GenericObjectPool<User>(factory,poolConfig);   

    for(int i=0; i<3; i++) {
        Thread.sleep(1000);
        //获取资源对象
        User user = objectPool.borrowObject();
        //将获取的资源对象,返还给资源池
        objectPool.returnObject(user);
        //输出资源对象
        System.out.println(user);
        System.out.println();
    }

}

测试结果
make Object
activate Object
passivate Object
com.lp.User@63f7d32f name:main,age:26,height:178cm

activate Object
passivate Object
com.lp.User@63f7d32f name:main,age:26,height:178cm

activate Object
passivate Object
com.lp.User@63f7d32f name:main,age:26,height:178cm

通过测试结果,可以看出 每次获取的都是一个对象。

如何找回mysql删除的表_mysql误删表如何恢复,恢复被删除表的步骤说明 小编寄语想必大家都知道,Oracle ACE李真旭(Roger)是国内最专业的Oracle 数据库恢复专家。但知识都是触类旁通,真正的专家,从来不会局限在一个方向上。今天分享的内容,是他在MySQL数据恢复上所做的尝试。本文主要分享在没有备份的情况下,MySQL数据库如何恢复被删除的表。包含两个主要的场景:1、drop table后的恢复2、truncate table后的恢复正文:我们都知道,M... 阅读详情

相关推荐

保姆级教程:用YOLOv5s训练PCB缺陷检测模型(附北大公开数据集)

本文提供了一份基于YOLOv5s的PCB缺陷检测模型从零开始的完整实战教程。详细解析了如何使用北大公开数据集,涵盖环境搭建、数据处理、模型训练、性能评估及优化部署全流程,并针对工业场景中常见的类别不均衡问题给出了具体解决方案,旨在帮助开发者快速构建高精度的自动化质检系统。

weixin_28285943的博客 308

java连接池详解与自定义es连接池

目录1 版本选择2 导入依赖3 使用commons-pool构造连接池3.1 pom.xml3.2 对象池类GenericObjectPool普通对象池GenericKeyedObjectPool带Key的对象池3.3 实现PoolableObjectFactory接口类3.4 继承BasePooledObjectFactory抽象类3.5 GenericObjectPool.Config()参数配置类3.6 elasticsearch连接池代码实现4 使用commons-pool2构造连接池4.1 pom

进击的豌豆的博客 4155

别再只用GPS了!用Android手机传感器实现室内步行轨迹记录(避坑指南)

本文详细介绍了如何利用Android手机传感器(如加速度计、陀螺仪和磁力计)实现室内步行轨迹记录,克服GPS在室内的局限性。通过传感器数据采集、步态检测、航向估计和轨迹绘制等步骤,结合避坑指南和优化技巧,帮助开发者高效构建室内定位应用。

weixin_26821003的博客 274

apache-common-pool2简单使用和源码分析

至此apache-common-pool2的部分关键代码分析完毕,对连接池有了更多的理解,个人使用案例参考之前做过另一篇笔记。

weixin_43316101的博客 1934

平均电流控制模式BUCK变换器的环路设计

引言 电压模式的BUCK变换器存在的常见缺点: 1、在没有前馈补偿的时候,对输入源的跳动响应较慢; 2、在不加入电感电流控制的时候,由于不直接对电感电流进行采样,因此不能实时的控制电感电流,有可能在某些负载极端变化时,系统直接奔溃; 3、LC组成的二阶系统存在谐振点,谐振峰随负载变化而变化,不容易做到完全消除; 峰值电流模式的BUCK变换器存在的常见缺点: 1、占空比大于50%时,存在次谐波震荡的问题,需要添加斜坡补偿已解决该问题; 2、抗干扰能力较差; 3、峰值电流和平均电流间存在误差,不适合做PFC线路

c007106333的博客 1万+

抖音短视频数据抓取实战系列(一)——模拟器性能对比与优化配置

本文是抖音短视频数据抓取实战系列的开篇,重点探讨了模拟器选型与优化配置。通过对比雷电、夜神、逍遥三大主流模拟器在性能、抖音兼容性及抓包友好度上的表现,文章指出雷电模拟器因其稳定的桥接网络模式和良好的兼容性,是数据抓取的优选。并提供了雷电模拟器从安装、网络桥接到系统优化的详细配置指南,旨在帮助读者构建稳定高效的抓取环境。

weixin_29230901的博客 248

common-pool2

文章目录1、简介2、核心接口3、对象池逻辑分析3.1、对象池接口说明3.2、 对象创建解耦3.2、池对象的状态3.3、对象池相关配置项3.4、对象池源码分析4、对象池`browObject`的逻辑5、对象池`returnObject`的过程执行逻辑6、对象池的自我保护机制7、工厂的`passivateObject(PooledObject p)`和`passivateObject(PooledObject p)`即对象的激活和钝化方法有有什么作用?8、使用步骤9、注意事项 1、简介 对象池就是一种存放对象的

weixin_44457533的博客 1618

微信抢红包神器自动抢软件

微信抢红包神器自动抢软件

weixin_44006731的博客 8081

Apache-Common-Pool2中对象池的使用方式

Apache Common-Pool2 组件最重要的功能,就是向开发人员提供一个稳定的、高性能的对象池。我们在实际开发过程中最常用、最典型的对象池就是数据库连接池。对象池可以在数据库连接对象被调用前,预先生成和管理一批可以使用的对象,用空间换时间的方式提升应用程序对数据库的操作性能。

JAVA入门中 1912

[QMT量化交易小白入门]-三十四、让deepseek分析北京炒家的首板策略后,在打板前增加了选股范围(量化python代码解析)

print(f'开始盘前选股')这行代码定义了一个名为的函数,当调用这个函数时,会首先打印出“开始盘前选股”的信息,表明选股流程正式启动。1、可根据情况增删部分条件,目前盘前选股目前可以选出140多支,比之前全市场监听带宽压力小了很多。2、还可以自行添加其他选股条件,比如换手率计算,炸板可能性检测。3、xtdata的数据是有可能缺失的,自己写策略时,有可能需要剔除,或者从第三方库校正,比如部分股票的流通股数。

木头大左的博客 2701

微信小程序 - 获取当前日期时间(函数封装)

效果图 前言 摘自微信小程序demo程序中utils.js方法。 普通newDate()出来的日期时间,并不是我们想要的格式,所以要进行格式整理。 解决方案 打开utils.js文件(随意),复制以下代码: /** *获取当前时间 *@description自定义日期分钟秒数 *@param{Object}date-newData()对象 *@returnString */ functionformatTime(date){ //年月日

🏆 前端领域优质创作者 2844

apache common pool2原理与实战

简介 对象池顾名思义就是存放对象的池,与我们常听到的线程池、数据库连接池、http连接池等一样,都是典型的池化设计思想。 对象池的优点就是可以集中管理池中对象,减少频繁创建和销毁长期使用的对象,从而提升复用性,以节约资源的消耗,可以有效避免频繁为对象分配内存和释放堆中内存,进而减轻jvm垃圾收集器的负担,避免内存抖动。 Apache Common Pool2 是Apache提供的一个通用对象池技术实现,可以方便定制化自己需要的对象池,大名鼎鼎的 Redis 客户端 Jedis 内部连接池就是基于它来实现的。

weixin_43511928的博客 2014

【C语言笔记初级篇】第一章:C语言快速入门及注意事项

(1)第一个C语言程序 A:利用vs2010写C语言程序 1:按以下步骤新建工程 2:添加源文件,“.c”文件 B:第一个C语言代码 1:以下是基本的C语言程序 2:由于没有设置连接器,所以打印结果没有显示,按照如下步骤链接控制台 (2)数据类型 A:基本数据类型及占用字节 B:一些概念的梳理 概念一:关于计算机的单位 位(bit):计算机通过电路的开关和闭合处理信息,电路通...

快乐江湖的博客 3740

apache common pool2 对象池使用和原理

}} }System . out . println("激活对象,借用时调用");System . out . println("销毁对象");System . out . println("创建对象");System . out . println("钝化对象,归还时调用");System . out . println("判断对象是否可用");} }

weixin_36001569的博客 1695

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深入理解Apache Commons Pool2池化技术

Apache Commons Pool2是Apache Commons下的一个开源项目,主要用于实现和管理对象池。对象池是一种常见的设计模式,通过复用来分摊昂贵对象的创建和销毁代价,从而优化资源利用和提高应用程序性能。Commons Pool2提供了一套用于实现对象池化的API,并内置了多种各具特色的对象池实现。其被广泛应用在各种数据库连接池、线程池以及请求分发池中。其实现提供了一些参数来控制对象池的行为,例如最大池化对象数、最大空闲时间、最小空闲数等,可以根据不同的应用场景进行灵活配置。

码到三十五 8242

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

对象池的设计

ObjectPool //从池中获取对象 T borrowObject() throws Exception, NoSuchElementException,IllegalStateException; //将对象放回池中 void returnObject(T obj) throws Exception; //废弃对象 void

xiaomin1991222的专栏 398

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

使用Apache Commons Pool2创建Java对象池

相比于其他实现对象池的技术,使用 Commons Pool2 实现对象池的优点是:它提供了完整的对象池管理功能,包括对象的创建、初始化、借用、归还、清理和销毁等操作,并且支持多线程环境下的并发访问和线程安全。此外,Commons Pool2 还具有灵活的配置选项,可以根据具体场景对对象池的性能和资源消耗进行优化。缺点是,使用 Commons Pool2 实现对象池需要引入额外的依赖,增加了项目的复杂性。

一群专业码农的笔记本 3061

spring 集成common-pool2

Common-pool2 The Apache Commons Pool open source software library provides an object-pooling API and a number of object pool implementations. Version 2 of Apache Commons Pool contains a completely re-written pooling implementation compared to the 1.x serie

keep_learn的专栏 1248

Apache Commons-pool2使用入门

2021SC@SDUSC 文章目录安装项目介绍Maven 依赖接口设计ObjectPoolPooledObjectPooledObjectFactory常用的实现类GenericObjectPool`borrowObject``returnObject`DefaultPooledObject使用介绍参考链接 安装 项目介绍 创建新的对象并初始化的操作,可能会消耗很多的时间。在这种对象的初始化工作包含了一些费时的操作(例如,从一台位于20,000千米以外的主机上读出一些数据)的时候,尤其是这样。在需要大量生

SongyangJi 3185

common-pool2的使用

我们在服务器开发的过程中,,比如数据库连接,网络IO,大数据对象等。在大量使用这些对象时,如果不采用一些技术优化,就会造成一些不可忽略的性能影响。一种办法就是,每次创建的对象并不实际销毁,而是缓存在对象池中,下次使用的时候,不用再重新创建,直接从对象池的缓存中取即可。为了避免重新造轮子,我们可以使用优秀的开源对象池化组件,我们只需要根据自己的业务需求重写或实现部分接口即可,使用它可以快速的创建一个方便,简单,强大对象连接池管理类。</</</</

weixin_57128596的博客 674

commons.pool2 对象池的使用

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34034670的博客 316

commons-pool2自定义对象池-快速开始

文章目录什么是commons-pool2常用APIGenericObjectPool类PooledObjectFactory分析jedis如何使用commons pool2thrift连接池的实现 什么是commons-pool2 利用commons-pool2自定义对象池 commons-pool2是Apache下一个开源的公共资源池。我们可以根据它来快速的建立一个自己的对象池。 链接池/对...

西京刀客 3134

池技术之common-pool2

是什么 apache commons-pool是apache基金会的一个开源对象池组件,我们常用的数据库连接池dpcp和redis的java客户端jedis都使用commons-pool来管理连接 优化对象的创建,和设计模式中的享元模式思路一样 类解析 Po...

chongcan0436的博客 772

Apache Commons Pool :介绍与使用

默认情况下,闲置对象不会自动过期,除非设置了逐出线程参数(如设置可以明确指定闲置对象的过期时间。通过调优minIdle和maxIdle可以更好地控制池中对象的生命周期。是一个高效的对象池管理库,广泛用于连接池、线程池等需要管理资源的场景。其配置包括最小闲置数 (minIdle)和逐出线程 (Evictor)参数。最小闲置数 (minIdle定义对象池中需要保持的最小空闲对象数。如果空闲对象少于该值,池会创建新的对象,直到满足minIdle。逐出线程 (Evictor周期性检查并清理空闲对象。

Thinking In Java 2834

springboot使用commons-pool2实现对象池

频繁的创建和销毁,会极大的降低系统的性能,而对象池会在初始化的时候会创建一定数量的对象,每次访问只需从对象池中获取对象,使用完毕后再放回对象池,并不是直接销毁,这样可以保证程序重复使用同一个对象而不需要每次访问都创建和销毁对象, 从而提高系统性能。pool2的组成PooledObject(池化对象) PooledObjectFactory(对象工厂) ObjectPool (对象池)需要池化的对象/*** 需要池化的对象*/TestObject 工厂。

刀林寻诗 1554
上一篇: spring多数据源的配置-以及原理
下一篇: spring 整合 redis,以及spring的RedisTemplate如何使用
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值