Java 8 连接时间与c3p0无关
我使用c3p0作为Java8应用程序的连接池,同时使用ibatis作为ORM工具。数据库存在频繁的连接时间问题。以下是配置参数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
<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以获取错误的堆栈跟踪。