c3p0的最佳配置

Bab*_*adi 37 java hibernate connection-pooling c3p0 jpa-2.0

我正在努力面对c3p0配置面临的问题.我上周发布了一个问题 - C3P0配置!在哪里和如何?,但没有收到答复.任何帮助表示赞赏.

Dom*_* D. 49

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

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

  • testConnectionOnCheckin返回池时验证连接.testConnectionOnCheckOut虽然在使用之前确保活动连接,但是这样做太昂贵了.
  • idleConnectionTestPeriod设置连接在测试之前保持空闲的时间限制.如果没有preferredTestQuery,默认值是DatabaseMetaData.getTables()- 这是数据库不可知的,虽然相对昂贵的调用,对于相对较小的数据库可能很好.如果您对性能有偏执,请使用特定于您的数据库的查询(即preferredTestQuery="SELECT 1")
  • maxIdleTimeExcessConnectionsminPoolSize在活动激增之后,将把connectionCount带回来.

下面的配置集池大小在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>
Run Code Online (Sandbox Code Playgroud)


Dar*_*les 2

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

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

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

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

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