Java 8 连接时间与c3p0无关

Java 8 连接时间与c3p0无关,java-8,connection-pooling,c3p0,ibatis,Java 8,Connection Pooling,C3p0,Ibatis,我使用c3p0作为Java8应用程序的连接池,同时使用ibatis作为ORM工具。数据库存在频繁的连接时间问题。以下是配置参数 <property name="minPoolSize" value="60" /> <property name="maxPoolSize" value="200" /> <property name="i

我使用c3p0作为Java8应用程序的连接池,同时使用ibatis作为ORM工具。数据库存在频繁的连接时间问题。以下是配置参数

   <property name="minPoolSize" value="60" />
                                <property name="maxPoolSize" value="200" />
                                <property name="initialPoolSize" value="60" />
                                <property name="statementCacheNumDeferredCloseThreads" value="1" />
                                <property name="acquireRetryAttempts" value="2"/>
                                <property name="checkoutTimeout" value="2000" />
                                <property name="debugUnreturnedConnectionStackTraces" value="true"/>
                                <property name="maxIdleTime" value="120"/>
                                <property name="autoCommitOnClose" value="false" />
                                <property name="testConnectionOnCheckin" value="true" />
                                <property name="numHelperThreads" value="3" />
以下是堆栈跟踪: 原因:java.sql.SQLException:客户端尝试签出连接超时。 位于com.mchange.v2.sql.SqlUtils.toSQLExceptionSqlUtils.java:118 位于com.mchange.v2.sql.SqlUtils.toSQLExceptionSqlUtils.java:77 在com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutpooledconnection3p0pooledconnectionpool.java:690 位于com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnectionAbstractPoolBackedDataSource.java:140 位于org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnectionJdbcTransaction.java:138 位于org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnectionJdbcTransaction.java:60 位于org.apache.ibatis.executor.BaseExecutor.getConnectionBaseExecutor.java:336 位于org.apache.ibatis.executor.SimpleExecutor.prepareStatementSimpleExecutor.java:84 位于org.apache.ibatis.executor.SimpleExecutor.doUpdateSimpleExecutor.java:49 位于org.apache.ibatis.executor.BaseExecutor.updateBaseExecutor.java:117 位于org.apache.ibatis.executor.CachingExecutor.updateCachingExecutor.java:76 位于org.apache.ibatis.session.defaults.DefaultSqlSession.updateDefaultSqlSession.java:198 ... 9更多 原因:com.mchange.v2.resourcepool.TimeoutException:客户端在等待从com.mchange.v2.resourcepool获取资源时超时。BasicResourcePool@501edcf1-可用时超时 位于com.mchange.v2.resourcepool.BasicResourcePool.WaitAvailableBasicResourcePool.java:1467 位于com.mchange.v2.resourcepool.basicResourceSourcePool.PrelimCheckOutResourceBasicResourceSourcePool.java:644 位于com.mchange.v2.resourcepool.basicResourceSourcePool.CheckOutResourceBasicResourceSourcePool.java:554 在com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUseC3P0PooledConnectionPool.java:758 在com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkOutPooledConnection3p0PooledConnectionPool.java:685

... 还有18个
配置是否有问题,或者如何解决此问题?

您可以很容易地解决超时问题。只需删除超时,即从配置中删除此行

<property name="checkoutTimeout" value="2000" />
…或者延长超时时间

但真正的问题是,为什么速度如此之慢,以至于有时客户端需要2秒以上的时间才能获得连接。一件突出的事情是,考虑到游泳池的大小,这可能太小了:

<property name="numHelperThreads" value="3" />
可能尝试10个线程,或者12个线程

还有,这个

<property name="debugUnreturnedConnectionStackTraces" value="true"/>

你可能想摆脱它。如果不设置unreturnedConnectionTimeout,这对您没有任何好处,而且它确实会带来性能成本。请参阅。

请参阅:另外,请确保您没有在任何其他例行程序中关闭连接。谢谢您的帮助!我试试看。另外,关于debugUnreturnedConnectionStackTraces,我们将此属性设置为true以获取错误的堆栈跟踪。