Apache Commons Pool 2中的maxTotal和maxIdle有什么区别?

sgo*_*les 6 java apache pool apache-commons

我正在使用Apache Commons Pool 2实现为我的应用程序提供对象池机制.

截至目前,我已设置的默认值maxTotal(),并maxIdle()10在我的代码.

但我无法理解它们之间有什么区别?如果我将maxIdle()值设置为非常小(假设为0)或非常大(等于maxTotal()),该怎么办?

注意:Apache类在内部建议上述两个配置的默认值为8.

Ell*_*sch 18

连接池是一种与无限数量的并发用户共享有限数量的数据库连接的技术.最大总连接数(maxTotal)包括活动连接和空闲连接,即正在使用的连接和当前未使用的连接(它是所有连接的总和).最大空闲连接(maxIdle)是准备使用的连接(但当前未使用).如果设置maxTotal为100,那么一次最多可以为数据库打开100个连接,如果maxIdle设置为10,那么如果没有使用任何连接,则最多可以释放90个连接.游泳池将按需重新连接.

在池中,空闲连接已准备就绪,如果连接当前处于空闲状态(池返回空闲连接),则不会阻止连接请求.如果没有连接空闲,则池将阻止打开连接或直到连接返回池.

在您的问题中,两者的最大值为10,将打开10个连接,池不会缩小或增长.

  • **maxIdle:池中可以保持空闲的最大连接数,无需释放多余的连接。minIdle:池中可以保持空闲的最小连接数,无需创建额外的连接**,所以我猜 minidle 将在池启动时创建,并且可以增加到 maxidle 吗?不,我认为还有一个名为 **initialsize** 的属性,所以仍然令人困惑......:( (3认同)

Kan*_*mar 8

我还是很想知道之间的区别maxideminidle,因此被称为这个这个,想在这里更新为别人喜欢我。

initialSize 池启动时创建的初始连接数

maxActive 可以随时从此池分配的最大活动连接数。该属性用于限制池中可以打开的连接数;以便可以在数据库端进行容量规划

maxIdle = 应始终保留在池中的最大空闲连接数。定期检查空闲连接(如果启用),并且空闲时间超过 minEvictableIdleTimeMillis 的连接将被释放

如果 maxIdle 在重载系统上设置得太低,您可能会看到连接被关闭,并且几乎立即打开新连接。所以最好让maxIdle 接近maxActive。

minIdle应始终保留在池中的最小已建立连接数。如果验证查询失败,连接池可以缩小到这个数字以下。

timeBetweenEvictionRunsMillis在空闲对象驱逐线程的运行之间休眠的毫秒数。当非正数时,不会运行空闲对象驱逐线程。

minEvictableIdleTimeMillis对象在有资格被驱逐之前可以在池中闲置的最短时间。

此外,如果您想确保您的生产系统中没有陈旧的连接。您可以使用下面的,但它是昂贵的操作,不适合性能关键的操作,但适合金融相关的应用程序服务。

database.connectionPool.testOnBorrow=true
database.connectionPool.testOnReturn=true
database.connectionPool.testWhileIdle=true
Run Code Online (Sandbox Code Playgroud)