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
然后就可以了。