C3P0 管理连接池尺寸与连接寿命

不同的应用在对性能、内存占用和可靠性等方面有不同的权衡需求。C3P0提供了大量的选项来控制池内连接数的增长或减小的速度,也可以用一些选项来决定“旧”连接是否应该主动地被替换以维持应用的可靠性。

[list]
[]maxConeectionAge
[
]maxIdleTime
[*]maxIdleTimeExcessConeections
[/list]

默认情况下,连接池不会给连接设定过期时间。如果你为了保持连接“新鲜”,想要给连接设定过期时间的话,需要设定maxIdleTime和/或maxConnectionAge。

maxIdleTime定义了连接因在多少秒内未被使用而被连接池剔除的时间。maxConnectionAge决定了所有从数据库中获取的连接将在多少秒后被连接池剔除。

maxIdleTimeExcessConnections用来最小化c3p0欠载(under load)时的连接数。默认情况下,在c3p0欠载时,c3p0只会因连接测试失败或者连接过期而缩小池中的连接数。有一些用户需要在一些突然增大会连接数的操作之后快速地释放不必要的连接。

你可以通过把maxIdleTimeExcessConnetions设定为一个比maxIdleTime小得多的值来达到这个目的。超过最小连接数的那些连接会在较小的一段空闲时间之后被连接池剔除。

对设置这类超时参数有一些普通的建议:悠着点!使用连接池的重点就是尽量只从数据库中获取连接一次,然后不断重复地使用它们。大多数的数据库的连接可以一次维持若干小时。没有必要每隔几秒钟或几分钟就剔除那些空闲的连接。把maxConnectionAge或maxIdleTime设置成1800(30分钟)都是有些激进的。

对于大多数数据库来讲,几个小时或许更加合理。你可以用连接测试来确保可靠性,而不是一味地剔除它们(见配置连接测试)。通常只有maxIdleTimeExcessConnetions这个参数可以被设置成几分钟或更短的时间。

REF:
http://cwiki.ossez.com/pages/viewpage.action?pageId=4719813