Java Apache Commons池2中的maxTotal和maxIdle之间有什么区别?

Java Apache Commons池2中的maxTotal和maxIdle之间有什么区别?,java,apache,apache-commons,pool,Java,Apache,Apache Commons,Pool,我正在使用ApacheCommonsPool2实现为我的应用程序提供对象池机制 到目前为止,我已经在代码中将maxTotal()和maxIdle()的默认值设置为10 但我无法理解它们之间的区别是什么?如果我将maxIdle()设置为一个非常小(比如说0)或非常大(等于maxTotal())的值,该怎么办 注意:Apache classes内部建议上述两种配置的默认值均为8。连接池是一种与数量不受限制的同时用户共享数量有限的数据库连接的技术。最大总连接数(maxTotal)包括活动和空闲连接数,

我正在使用ApacheCommonsPool2实现为我的应用程序提供对象池机制

到目前为止,我已经在代码中将
maxTotal()
maxIdle()
的默认值设置为
10

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


注意:Apache classes内部建议上述两种配置的默认值均为8。

连接池是一种与数量不受限制的同时用户共享数量有限的数据库连接的技术。最大总连接数(
maxTotal
)包括活动和空闲连接数,即正在使用的连接数和当前未使用的连接数(它是所有连接数的总和)。最大空闲连接(
maxIdle
)是准备好使用(但当前未使用)的连接。如果将
maxTotal
设置为100,则一次最多可打开100个数据库连接;如果
maxIdle
设置为10,则如果未使用任何连接,则最多可释放90个连接。池将按需重新连接

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


在您的问题中,如果两者中的最大值为10,则将打开10个连接,并且池不会收缩或增长。

我仍然很想知道
maxide
minidle
之间的区别,因此请参考,并希望在此为像我这样的其他人更新

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

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

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

如果在负载较重的系统上将maxIdle设置得太低,您可能会看到连接关闭,并且几乎立即打开新的连接。因此,最好保持maxIdle接近maxActive

minIdle池中应始终保持的最小已建立连接数。如果验证查询失败,连接池可能会收缩到此数字以下

timebetweenvictionrunsmillis空闲对象逐出器线程运行之间的休眠毫秒数。如果为非正,则不会运行空闲对象逐出器线程

minevictableidletimillis对象在符合驱逐条件之前在池中闲置的最短时间

另外,如果您希望确保生产系统中没有过时的连接,请执行以下操作。 您可以使用下面的方法,但这是一种成本高昂的操作,不适合性能关键型操作,但适合与财务相关的应用程序服务

database.connectionPool.testOnBorrow=true
database.connectionPool.testOnReturn=true
database.connectionPool.testWhileIdle=true

谢谢你的详细解释。我同意这是一个彻底的解释。我想补充一点,通过使用“数据库连接”,可以限制连接池的值。毕竟,如本文所述,一个池可以用于多种类型的资源。有叫迷你们的吗。。?如果是,请解释一下。maxIdle:池中可以保持空闲的最大连接数,而不释放额外的连接数。minIdle:池中可以保持空闲的最小连接数,而不创建额外的连接,因此我猜在启动池时将创建minIdle,并且可以增加到maxidle?不,我认为还有一个属性叫做initialsize,所以仍然让人困惑…:(