【发布时间】:2014-05-06 21:05:41
【问题描述】:
我想配置我的 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,一个基本功能,只有在与我认为更高级的功能一起使用时才重要。这一切都正确吗?
【问题讨论】:
标签: java jdbc connection-pooling c3p0