千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > testwhileidle用法介绍

testwhileidle用法介绍

来源:千锋教育
发布人:xqq
时间: 2023-11-25 06:35:47 1700865347

一、testwhileidle是什么?

testwhileidle是apache.commons.pool2中的一个类,它是在对象池中用于空闲对象个数维护的函数。它在所有线程都处于等待状态时,会把所有的空闲对象进行一个校验,看它们是否都能正常工作。如果有任何一个对象校验失败,那么都会被清除,并重新创建。

二、使用场景

testwhileidle适用于以下几种场景:

1、需要定期对池中的对象进行校验,以确保空闲对象都能正常工作,防止由于长时间处在池中而导致无法工作的对象出现。

2、需要对池中的对象进行状态的时间感知,以及针对性的校验。例如,某个对象在长时间处于空闲状态后可能已经处于失效状态,那么可以使用testwhileidle来确保它的状态在被使用之前得到恢复。

3、需要对池进行前期的初始化,以便在池中后面出现大量请求时,池中的对象已经预先被创建出来,提高响应速度。

三、示例代码


public class ConnectionFactory extends BasePooledObjectFactory {

    @Override
    public Connection create() throws Exception {
        // 创建连接代码
    }

    @Override
    public PooledObject wrap(Connection obj) {
        return new DefaultPooledObject<>(obj);
    }

    @Override
    public boolean validateObject(PooledObject p) {
        // 对象校验代码
    }

    @Override
    public void destroyObject(PooledObject p) {
        // 对象销毁代码
    }
}

public class Main {
    public static void main(String[] args) {
        GenericObjectPoolConfig config = new GenericObjectPoolConfig<>();
        config.setMaxTotal(10);
        config.setMaxIdle(5);
        config.setMinIdle(2);
        config.setTestWhileIdle(true);
        config.setTestOnBorrow(false);
        config.setTestOnReturn(false);
        config.setMinEvictableIdleTimeMillis(60000L);
        config.setTimeBetweenEvictionRunsMillis(30000L);

        ConnectionFactory factory = new ConnectionFactory();
        try (GenericObjectPool pool = new GenericObjectPool<>(factory, config)) {
            // 使用对象池中的连接进行业务操作
        }
    }
}

四、配置参数说明

1、setMaxTotal(int maxTotal):池的最大连接数。

2、setMaxIdle(int maxIdle):池中维护的最大空闲连接数。

3、setMinIdle(int minIdle):池中维护的最小空闲连接数。

4、setTestWhileIdle(boolean testWhileIdle):是否在空闲时检查池中对象的有效性。

5、setTestOnBorrow(boolean testOnBorrow):是否在获取对象时检查对象的有效性。

6、setTestOnReturn(boolean testOnReturn):是否在返回对象时检查对象的有效性。

7、setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis):在池中保持空闲状态的最小时间,超过这个时间未被使用的对象将被逐出池。

8、setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis):定时检查池中对象的间隔时间。

五、总结

testwhileidle是apache.commons.pool2中的一个类,用于在对象池中对空闲对象进行校验,在对象被使用之前确保它们处于正常工作状态。它的使用场景包括对池中对象进行定期校验、状态恢复、前期初始化等。通过上面的示例,我们可以看到它的具体用法,并了解到常用的配置参数及其作用。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT