全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

testwhileidle用法介绍

发布时间:2023-11-25 06:35:47
发布人:xqq

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

javaretainall

相关文章

Linux中查看文件后100行详解

Linux中查看文件后100行详解

2023-11-25
linux查看硬盘故障,linux查看硬盘硬件信息

linux查看硬盘故障,linux查看硬盘硬件信息

2023-11-25
从多个方面详细解析如何启动jar包

从多个方面详细解析如何启动jar包

2023-11-25
C++中的Byte类型及其使用方法

C++中的Byte类型及其使用方法

2023-11-25

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取