我正在努力解决c3p0配置面临的问题。I posted a question last week
发布于 2012-09-21 21:21:37
这是我正在使用的一种配置,它将资源保持在最低限度。当然,您需要定制您的应用程序以使用它需要的资源……
参考:http://www.mchange.com/projects/c3p0/index.html
当连接返回到池中时,
testConnectionOnCheckin会对其进行验证。虽然在使用之前,testConnectionOnCheckOut可以确保活动连接,但对于do.idleConnectionTestPeriod来说代价太高了。在测试连接之前,testConnectionOnCheckOut对连接保持空闲的时间设置了限制。在没有preferredTestQuery的情况下,默认值是DatabaseMetaData.getTables() -它与数据库无关,虽然调用成本相对较高,但对于相对较小的数据库来说可能已经足够了。如果您对性能有疑虑,请使用特定于您的数据库的查询(例如,在活动达到峰值后,preferredTestQuery="SELECT 1")maxIdleTimeExcessConnections将使connectionCount返回到minPoolSize。下面的配置将poolsize设置在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>发布于 2012-09-20 15:04:20
最佳配置是将JPA设置为使用容器环境来获取DataSource。
这允许容器提供连接池,而不是直接将其配置到JPA项目中。
您没有指明您使用的是哪个容器环境。我几乎总是将c3p0用于独立的应用程序,比如Java桌面或服务器应用程序。我也在Spring框架中使用它。
在使用Servlet (Tomcat/Jetty)或Application Server (例如Glashfish或JBoss AS)等容器时,这些容器已经提供了一个DataSource连接池实现,该实现通常不是c3p0,但提供了等效的功能。
我从未尝试在JPA项目中配置连接池,因为这意味着要编辑配置,以便为它需要运行的每个环境自定义它。这是一个令人头疼的问题,所以最好给JPA part提供在引导过程中使用的DataSource。
https://stackoverflow.com/questions/12507021
复制相似问题