c3p0 的最佳配置 [已关闭]

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


答案 1

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

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

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

下面的配置集池大小介于 3-20 之间。空闲连接每 5 分钟重新测试一次,以使其保持活动状态。因为,这只会保持最小数量的连接数。如果在 4 分钟标记处有超过 3 个连接,则会终止这些连接,从而将资源释放回最小值。idleConnectionTestPeriod

使用和否定maxIdleTimeExcessConnectionsidleConnectionTestPeriodmaxIdleTime

<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>

答案 2

最佳配置是设置 JPA 以使用容器环境获取数据源。

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

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

当使用Servlet(Tomcat/Jetty)或Appplication Server(如Glashfish或JBoss AS)等容器时,它们已经提供了DataSource连接池程序实现,该实现通常不是c3p0,但提供了等效的功能。

我从未尝试过在JPA项目中配置连接池程序,因为这意味着编辑配置以针对需要运行的每个环境对其进行自定义。这是一个令人头疼的问题,因此最好为JPA部分提供数据源以在引导期间使用。


推荐