Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java maxIdleTimeExcessConnections与c3p0中的maxIdleTime有何不同?_Java_Jdbc_Connection Pooling_C3p0 - Fatal编程技术网

Java maxIdleTimeExcessConnections与c3p0中的maxIdleTime有何不同?

Java maxIdleTimeExcessConnections与c3p0中的maxIdleTime有何不同?,java,jdbc,connection-pooling,c3p0,Java,Jdbc,Connection Pooling,C3p0,我想配置我的c3p0连接池,以便至少有2个连接始终处于活动状态,最多5个,超过前2个的空闲连接将在合理的时间(例如一小时)内过期 这听起来很简单,只是文档似乎暗示函数maxIdleTime和maxIdleTimeExcessConnections之间没有区别,这让我很困惑 国家: 在minPoolSize和maxPoolSize之间的范围内,池中的连接数根据使用模式而变化。每当用户请求连接时,连接数就会增加,没有可用的连接,并且池在管理的连接数中尚未达到maxPoolSize。由于连接获取非常缓

我想配置我的c3p0连接池,以便至少有2个连接始终处于活动状态,最多5个,超过前2个的空闲连接将在合理的时间(例如一小时)内过期

这听起来很简单,只是文档似乎暗示函数
maxIdleTime
maxIdleTimeExcessConnections
之间没有区别,这让我很困惑

国家:

在minPoolSize和maxPoolSize之间的范围内,池中的连接数根据使用模式而变化。每当用户请求连接时,连接数就会增加,没有可用的连接,并且池在管理的连接数中尚未达到maxPoolSize。由于连接获取非常缓慢,因此,成批急切地增加连接数量几乎总是有用的,而不是在负载增加时强迫每个客户端等待新连接来触发单个获取。acquireIncrement确定c3p0池在连接用尽时尝试获取的连接数。(无论acquireIncrement如何,池将永远不允许超过maxPoolSize。)

minPoolSize
用法:

池在任何给定时间将保持的最小连接数

好的,很好。和用于配置连接时间:

maxIdleTimeExcessConnections是关于在c3p0池未加载时最小化该池持有的连接数。默认情况下,c3p0池在负载下增长,但仅当连接未通过连接测试或通过上述参数过期时才会收缩。一些用户希望他们的池在使用量猛增后能够快速释放不必要的连接,从而导致池的大小变大。您可以通过将maxIdleTimeExcessConnections设置为比maxIdleTime短得多的值来实现这一点,如果超过设置的最小大小的连接闲置时间超过一小段时间,则强制释放这些连接

因此,这意味着
minPoolSize
仅在与
maxIdleTimeExcessConnections
结合使用时才起作用,否则,它将被完全忽略

证实
maxIdleTime
的文档时,没有提到
minPoolSize

在丢弃连接之前,连接可以保持池状态但未使用的秒数。零表示空闲连接永不过期

而且
maxIdleTimeExcessConnections
有意义:

在剔除之前,应允许超过minPoolSize的连接在池中保持空闲的秒数。适用于希望最大限度地减少打开的连接数的应用程序,如果在出现峰值后,负载级别降低,并且不再需要获取的连接,则将池缩小到minPoolSize。如果设置了maxIdleTime,则如果参数要产生任何影响,maxIdleTimeExcessConnections应该更小。零表示没有强制,多余的连接不会空闲


我觉得非常奇怪的是,
minPoolSize
,一个基本功能,只在与我认为更高级的功能一起使用时才起作用。这一切都对吗?

多么仔细和律师般的阅读啊

但是不,这是不对的

有几种方法可以终止连接。正如你所引述:

c3p0池…如果连接测试失败或通过上述参数过期,则收缩

“上述参数”包括
maxConnectionAge
maxIdleTime
,以及
maxIdleTimeExcessConnections
。连接也可以从池中删除,因为它们在空闲时未通过连接测试(请参阅
idleConnectionTestPeriod
),因为它们在签入或签出时未通过测试(
testConnectionOnCheckin
testConnectionOnCheckout
),或者因为在客户端使用过程中出现异常而导致测试失败

但是,池会收缩,
minPoolSize
很重要,因为如果池收缩到
minPoolSize
以下,则会替换被破坏的连接,直到恢复
minPoolSize

maxIdleTimeExcessConnections
的独特之处在于,它的行为直接取决于相对于
minPoolSize
的池大小。所有其他参数和测试都只是做它们自己的事情。如果他们的操作恰好使池的大小低于
minPoolSize
,那么c3p0将自动将池的大小恢复到
minPoolSize
。但是
maxIdleTimeExcessConnections
是不同的。它仅在池大于
minPoolSize
时才有效

正如您所说,
maxIdleTimeExcessConnections
是一项高级功能。大多数用户从来没有也不需要使用它。之所以添加它,是因为一些用户希望积极地强制池收缩回minPoolSize,但使用非常短的无条件
maxIdleTime
会导致不必要的连接流失,因为即使在
minPoolSize
池中,连接也会不断过期和更换。设置长的或不存在的
maxIdleTime
,而设置短的
maxIdleTimeExcessConnections
可以在池达到
minPoolSize
时快速、积极地收缩连接,而不影响连接

但是,即使没有
maxIdleTimeExcessConnections
set,
minPoolSize
也非常重要。连接确实会被销毁并从池中删除,并且
minPoolSize
确定一个阈值,低于该阈值,即使没有客户端负载引起池扩展,也会自动替换已销毁的连接


我希望这是有意义的

史蒂夫·沃克曼的回答很好,我只想补充一个简短的答案:

server.session.timeout=3600