我正在困扰着一个与c3p0配置相关的问题。上周我发布了一个问题。
这是我使用的配置,可以将资源最小化。当然,你需要根据自己的应用程序来定制它所需的资源...
参考资料:http://www.mchange.com/projects/c3p0/index.html
testConnectionOnCheckin
在连接返回池时验证连接。testConnectionOnCheckOut
虽然会确保在使用之前激活连接,但成本过高。idleConnectionTestPeriod
设置了测试连接空闲时间的限制。如果没有 preferredTestQuery
,则默认是 DatabaseMetaData.getTables()
—虽然这是与数据库无关的相对昂贵的调用,但对于比较小的数据库可能还好。如果你对性能非常敏感,请使用特定于你的数据库的查询(例如: preferredTestQuery="SELECT 1"
)。maxIdleTimeExcessConnections
将在活动量激增后将连接数降至 minPoolSize
。以下配置将池大小设置为3-20。空闲连接每5分钟重新测试一次以保持其活动状态。由于有 idleConnectionTestPeriod
,这只会保留最小数量的连接。如果在4分钟时有超过3个连接,则会关闭这些连接,将资源释放回到最小值。
使用 maxIdleTimeExcessConnections
和 idleConnectionTestPeriod
可以避免需要 maxIdleTime
<Context docBase="myapp" path="/myapp" reloadable="true">
<Resource description="My DB Datasource" name="jdbc/mydb"
auth="Container" factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
user="myuser" password="******"
minPoolSize="3"
maxPoolSize="20"
acquireIncrement="1"
driverClass="com.mysql.jdbc.Driver"
jdbcUrl="jdbc:mysql://localhost:3306/mydb"
testConnectionOnCheckin="true"
idleConnectionTestPeriod="300"
maxIdleTimeExcessConnections="240"
/>
</Context>
idleConnectionTestPeriod
用于保持与minPoolSize
定义的少数剩余连接的连接状态。可以将其视为白天主要使用的数据库。在一天中的其他时间,我们只需在 4 分钟后终止空闲连接,但在晚上,我们每隔 5 分钟测试 3 个剩余的空闲连接,以确保它始终可用。 - Domenic D.maxIdleTime
设置为120秒,而idleConnectionTestPeriod
设置为300秒。这是否意味着空闲连接可能不总是在达到120秒时被清除?请澄清一下。 - asgs