c3p0的最佳配置



我正在努力解决c3p0配置面临的问题。我上周发布了一个问题

这是我正在使用的一种配置,它将资源保持在最低限度。当然,您需要定制应用程序以使用所需的资源。。。

参考:http://www.mchange.com/projects/c3p0/index.html

  • testConnectionOnCheckin在连接返回到池时验证连接。testConnectionOnCheckOut虽然可以在使用前确保活动连接,但成本太高
  • idleConnectionTestPeriod设置了一个连接在测试前保持空闲时间的限制。如果没有preferredTestQuery,默认值是DatabaseMetaData.getTables(),这是数据库无关的,尽管调用相对昂贵,但对于相对较小的数据库来说可能是可以的。如果您对性能感到偏执,请使用特定于数据库的查询(即preferredTestQuery="SELECT 1")
  • maxIdleTimeExcessConnections将在活动中出现尖峰之后使connectionCount返回到minPoolSize

以下配置将池大小设置在3-20之间。空闲连接每5分钟重新测试一次,以保持其活动状态。由于idleConnectionTestPeriod,这将只保持最小数量的连接处于活动状态。如果在4分钟标记处有3个以上的连接,则会终止这些连接,从而将资源释放到最低限度。

maxIdleTimeExcessConnectionsidleConnectionTestPeriod的使用否定了对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>

最佳配置是设置JPA以使用容器环境来获取DataSource。

这允许容器提供连接池,而不是将其直接配置到JPA项目中。

您没有指出您正在使用的容器环境。我几乎总是在独立应用程序中使用c3p0,例如Java SE桌面或服务器应用程序。我还将它与Spring框架一起使用。

当使用Servlet(Tomcat/JJetty)或ApplicationServer(Glashfish或JBoss as)等容器时,这些容器已经提供了一个DataSource连接池器实现,该实现通常不是c3p0,但提供了等效的功能。

我从来没有尝试过在JPA项目中配置连接池,因为这意味着编辑配置,为它需要运行的每个环境自定义它。这是一个令人头疼的问题,所以最好给JPA部分一个在引导过程中使用的DataSource。

最新更新