2013-9-13 16:25:18 com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDet
ector run
警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@200d0c
-- APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 3
Active Threads: 3
Active Tasks:
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@bdb859
(com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@191f61
c (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1b4b24
d (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)
Pending Tasks:
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@260829
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@e1fb6c
Pool thread stack traces:
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5
,main]
java.lang.Thread.sleep(Native Method)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(Ba
sicResourcePool.java:1805)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run
(ThreadPoolAsynchronousRunner.java:547)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5
,main]
java.lang.Thread.sleep(Native Method)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(Ba
sicResourcePool.java:1805)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run
(ThreadPoolAsynchronousRunner.java:547)
Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5
,main]
java.lang.Thread.sleep(Native Method)
com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(Ba
sicResourcePool.java:1805)
com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run
(ThreadPoolAsynchronousRunner.java:547)
下載c3p0-0.2.9.1.zip文件。裏面包含3個jar文件。
倒入項目並buildpath;
然後參看配置:application.xml
<bean id="parentDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}" />
<!-- 連接池信息 -->
<!-- 當連接池中的連接用完時,C3P0一次性創建新連接的數目 -->
<property name="acquireIncrement" value="${c3p0.acquireIncrement}" />
<!-- 初始化時創建的連接數,應在minPoolSize與maxPoolSize之間取值。默認爲3; -->
<property name="initialPoolSize" value="${c3p0.initialPoolSize}" />
<!-- 最大空閒時間,超過空閒時間的連接將被丟棄。爲0或負數則永不丟棄。默認爲0; -->
<property name="maxIdleTime" value="${c3p0.maxIdleTime}" />
<!-- 連接池中保留的最小連接數。默認爲15 -->
<property name="minPoolSize" value="${c3p0.minPoolSize}" />
<!-- 連接池中保留的最大連接數。默認爲15; -->
<property name="maxPoolSize" value="${c3p0.maxPoolSize}" />
<!-- JDBC的標準參數,用以控制數據源內加載的PreparedStatement數量。但由於預緩存的Statement屬 於單個Connection而不是整個連接池。所以設置這個參數需要考慮到多方面的因素,如果maxStatements與 maxStatementsPerConnection均爲0,則緩存被關閉。默認爲0; -->
<property name="maxStatements" value="${c3p0.maxStatements}" />
<!-- 連接池內單個連接所擁有的最大緩存Statement數。默認爲0; -->
<property name="maxStatementsPerConnection" value="${c3p0.maxStatementsPerConnection}"/>
jdbc.properties
c3p0.acquireIncrement=50
c3p0.initialPoolSize=100
c3p0.maxIdleTime=50
c3p0.minPoolSize=50
c3p0.maxPoolSize=1000
c3p0.maxStatements=0
c3p0.maxStatementsPerConnection=5
然後就可以了。