c3p0 的最佳配置 [已关闭]
2022-09-01 03:51:36
我正在努力解决c3p0配置面临的问题。我上周发布了一个问题
这是我使用的配置,它将资源保持在最低限度。当然,您需要定制应用程序以使用所需的资源...
参考资料: 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
使用和否定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>
最佳配置是设置 JPA 以使用容器环境获取数据源。
这允许容器提供连接池,而不是将其直接配置到 JPA 项目中。
您没有指明您正在使用的容器环境。我几乎总是将c3p0与独立应用程序一起使用,例如Java SE桌面或服务器应用程序。我也在Spring框架中使用它。
当使用Servlet(Tomcat/Jetty)或Appplication Server(如Glashfish或JBoss AS)等容器时,它们已经提供了DataSource连接池程序实现,该实现通常不是c3p0,但提供了等效的功能。
我从未尝试过在JPA项目中配置连接池程序,因为这意味着编辑配置以针对需要运行的每个环境对其进行自定义。这是一个令人头疼的问题,因此最好为JPA部分提供数据源以在引导期间使用。