Java 休眠中的c3p0死锁

Java 休眠中的c3p0死锁,java,hibernate,c3p0,Java,Hibernate,C3p0,我不熟悉hibernate,并且已经开始使用C3P0作为hibernate的连接池管理器,因为如果没有C3P0,我在与MySQL服务器8个小时没有联系后就会出现超时问题 在切换到C3P0之后,我最近遇到了一个死锁,我不知道它是如何发生的。我有所有的堆栈跟踪和配置要显示 这是配置日志 Jan 27, 2017 5:56:23 PM com.mchange.v2.log.MLog <clinit> INFO: MLog clients using java 1.4+ standard l

我不熟悉hibernate,并且已经开始使用C3P0作为hibernate的连接池管理器,因为如果没有C3P0,我在与MySQL服务器8个小时没有联系后就会出现超时问题

在切换到C3P0之后,我最近遇到了一个死锁,我不知道它是如何发生的。我有所有的堆栈跟踪和配置要显示

这是配置日志

Jan 27, 2017 5:56:23 PM com.mchange.v2.log.MLog <clinit>
INFO: MLog clients using java 1.4+ standard logging.
Jan 27, 2017 5:56:23 PM com.mchange.v2.c3p0.C3P0Registry banner
INFO: Initializing c3p0-0.9.2.1 [built 20-March-2013 10:47:27 +0000; debug? true; trace: 10]
Jan 27, 2017 5:56:23 PM com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@28c81cce [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@35af8b6c [ acquireIncrement -> 1, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge14z9l1qg67m9nxywg8|c2db68f, idleConnectionTestPeriod -> 300, initialPoolSize -> 1, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 120, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 25, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 1, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@2e47880e [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 1hge14z9l1qg67m9nxywg8|1b765a2c, jdbcUrl -> jdbc:mysql://localhost/Pokemon_Blaze_Online_Dev, properties -> {user=******, password=******} ], preferredTestQuery -> select 1;, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 1hge14z9l1qg67m9nxywg8|7e276594, numHelperThreads -> 3 ]
2017年1月27日下午5:56:23 com.mchange.v2.log.MLog
信息:使用Java1.4+标准日志记录的MLog客户端。
2017年1月27日下午5:56:23 com.mchange.v2.c3p0.c3p0注册横幅
信息:初始化c3p0-0.9.2.1[构建于2013年3月20日10:47:27+0000;调试?正确;跟踪:10]
2017年1月27日下午5:56:23 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
信息:正在初始化c3p0池。。。com.mchange.v2.c3p0。PoolBackedDataSource@28c81cce[connectionPoolDataSource->com.mchange.v2.c3p0。WrapperConnectionPoolDataSource@35af8b6c [acquireIncrement->1,AcquireEntryAttributes->30,AcquireEntryDisplay->1000,自动提交关闭->false,自动测试表->null,breakAfterAcquireFailure->false,签出超时->0,connectionCustomizerClassName->null,ConnectionTestClassName->com.mchange.v2.c3p0.impl.DefaultConnectionTester,DebuggeunReturnedConnectionsTackTraces->false,factoryClassLocation->null,ForceIgnoreUnsolvedTransactions->false,identityToken->1hge14z9l1qg67m9nxywg8 | c2db68f,idleConnectionTestPeriod->300,initialPoolSize->1,maxAdministrativeTaskTime->0,maxConnectionAge->0,maxIdleTimeExcessConnections->->0,maxPoolSize->25,maxStatements->0,maxStatementsPerConnection->0,minPoolSize->1,nestedDataSource->com.mchange.v2.c3p0。DriverManagerDataSource@2e47880e[description->null,driverClass->null,factoryClassLocation->null,identityToken->1hge14z9l1qg67m9nxywg8 | 1b765a2c,jdbcUrl->jdbc:mysql://localhost/Pokemon_Blaze_Online_Dev,属性->{user=*******,password=******}],preferredTestQuery->select 1;,propertyCycle->0,语句CacheNumDeferredCloseThreads->0,testConnectionOnCheckin->false,testConnectionOnCheckout->false,unreturnedConnectionTimeout->0,UseStraditionalReflectionProxies->false;用户覆盖:{}],dataSourceName->null,factoryClassLocation->null,identityToken->1hge14z9l1qg67m9nxywg8 | 7e276594,numHelperThreads->3]
以下是我设置的属性

<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">300</property>
<property name="hibernate.c3p0.timeout">120</property>
<property name="hibernate.c3p0.max_size">25</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_statement">0</property>
<property name="hibernate.c3p0.preferredTestQuery">select 1;</property>
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
1
300
120
25
1.
0
选择1;
org.hibernate.connection.C3P0ConnectionProvider
下面是其中一个被锁定线程的线程转储

"Request Pool-0" #71 prio=5 os_prio=0 tid=0x000000002b2df800 nid=0x1d48 in Object.wait() [0x000000003113e000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1414)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:606)
    - locked <0x00000006c1b3c088> (a com.mchange.v2.resourcepool.BasicResourcePool)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:526)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:755)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:682)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
    at org.hibernate.c3p0.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:90)
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:387)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:63)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:162)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:160)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1884)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1861)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838)
    at org.hibernate.loader.Loader.doQuery(Loader.java:909)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354)
    at org.hibernate.loader.Loader.doList(Loader.java:2553)
    at org.hibernate.loader.Loader.doList(Loader.java:2539)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369)
    at org.hibernate.loader.Loader.list(Loader.java:2364)
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1682)
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380)
    at org.hibernate.internal.CriteriaImpl.uniqueResult(CriteriaImpl.java:402)
    at com.game.server.persistence.services.player.PlayerDataServiceImpl.areValidCredentials(PlayerDataServiceImpl.java:28)
    at com.game.server.manager.request.service.DefaultLoginService.login(DefaultLoginService.java:78)
    at com.game.server.manager.request.DefaultRequestManager.lambda$login$2(DefaultRequestManager.java:103)
    at com.game.server.manager.request.DefaultRequestManager$$Lambda$63/869031346.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
    - <0x000000079eea0890> (a java.util.concurrent.ThreadPoolExecutor$Worker)
对象中的“请求池-0”#71优先级=5 os_优先级=0 tid=0x000000002BF800 nid=0x1d48。等待()[0x000000003113e000]
java.lang.Thread.State:正在等待(在对象监视器上)
在java.lang.Object.wait(本机方法)
位于com.mchange.v2.resourcepool.BasicResourcePool.waitAvailable(BasicResourcePool.java:1414)
位于com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:606)
-锁定(com.mchange.v2.resourcepool.BasicResourcePool)
位于com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:526)
在com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:755)
在com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:682)
位于com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
位于org.hibernate.c3p0.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:90)
位于org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.ActainConnection(AbstractSessionImpl.java:387)
位于org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.ActainConnection(LogicalConnectionImpl.java:228)
位于org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171)
位于org.hibernate.engine.jdbc.internal.statementpresparerimpl.connection(statementpresparerimpl.java:63)
位于org.hibernate.engine.jdbc.internal.StatementPrepareImpl$5.doPrepare(statementPrepareImpl.java:162)
位于org.hibernate.engine.jdbc.internal.StatementPrepareImpl$StatementPreparationTemplate.prepareStatement(statementPrepareImpl.java:186)
位于org.hibernate.engine.jdbc.internal.statementPrepareImpl.prepareQueryStatement(statementPrepareImpl.java:160)
位于org.hibernate.loader.loader.prepareQueryStatement(loader.java:1884)
位于org.hibernate.loader.loader.executeQueryStatement(loader.java:1861)
位于org.hibernate.loader.loader.executeQueryStatement(loader.java:1838)
位于org.hibernate.loader.loader.doQuery(loader.java:909)
在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:354)上
位于org.hibernate.loader.loader.doList(loader.java:2553)
位于org.hibernate.loader.loader.doList(loader.java:2539)
位于org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2369)
位于org.hibernate.loader.loader.list(loader.java:2364)
位于org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126)
位于org.hibernate.internal.SessionImpl.list(SessionImpl.java:1682)
位于org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380)
位于org.hibernate.internal.CriteriaImpl.uniqueResult(CriteriaImpl.java:402)
在com.game.server.persistence.services.player.PlayerDataServiceImpl.areValidCredentials上(PlayerDataServiceImpl.java:28)
在com.game.server.manager.request.service.DefaultLoginService.login上(DefaultLoginService.java:78)
位于com.game.server.manager.request.DefaultRequestManager.lambda$login$2(DefaultRequestManager.java:103)
位于com.game.server.manager.request.DefaultRequestManager$$Lambda$63/869031346.run(未知源)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
<property name="hibernate.c3p0.unreturnedConnectionTimeout">30</property>
<property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces">true</property>