c3p0 APPARENT DEADLOCK問題

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 

然後就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章