Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java c3p0挂起,可与hibernate一起使用_Java_Mysql_Hibernate_Jdbc_C3p0 - Fatal编程技术网

Java c3p0挂起,可与hibernate一起使用

Java c3p0挂起,可与hibernate一起使用,java,mysql,hibernate,jdbc,c3p0,Java,Mysql,Hibernate,Jdbc,C3p0,我的控制台应用程序在执行期间挂起。以下是我的配置: cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); cfg.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/db?user=db&password=db"); cfg.setProperty("hibernate.con

我的控制台应用程序在执行期间挂起。以下是我的配置:

    cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
    cfg.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/db?user=db&password=db");
    cfg.setProperty("hibernate.connection.username", "db");
    cfg.setProperty("hibernate.connection.password", "db");
    cfg.setProperty("hibernate.connection.pool_size", "5");
    cfg.setProperty("hibernate.connection.autocommit", "false");
    cfg.setProperty("hibernate.c3p0.min_size", "5");
    cfg.setProperty("hibernate.c3p0.max_size", "20");
    cfg.setProperty("hibernate.c3p0.timeout", "300");
    cfg.setProperty("hibernate.c3p0.max_statements", "50");
    cfg.setProperty("hibernate.c3p0.idle_test_period", "3000");
这是我的stacktrace:

"main" prio=10 tid=0x000000000168f800 nid=0x1c37 in Object.wait() [0x00007fa60d0ad000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000007400f4c68> (a com.mchange.v2.resourcepool.BasicResourcePool)
        at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1315)
        at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
        - locked <0x00000007400f4c68> (a com.mchange.v2.resourcepool.BasicResourcePool)
        at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
        at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
        at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
        at org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:84)
        at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:281)
        at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297)
        at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169)
        at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)
        at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)
        at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1392)
        at org.kriyak.parser.IndexArchiveRapid.indexFile(IndexArchiveRapid.java:70)
        at org.kriyak.parser.IndexArchiveRapid.main(IndexArchiveRapid.java:53)
“main”prio=10 tid=0x000000000168f800 nid=0x1c37在Object.wait()中[0x00007fa60d0ad000]
java.lang.Thread.State:正在等待(在对象监视器上)
在java.lang.Object.wait(本机方法)
-等待(com.mchange.v2.resourcepool.BasicResourcePool)
位于com.mchange.v2.resourcepool.BasicResourcePool.waitAvailable(BasicResourcePool.java:1315)
位于com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557)
-锁定(com.mchange.v2.resourcepool.BasicResourcePool)
位于com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477)
在com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
位于com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
位于org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:84)
位于org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.ActainConnection(AbstractSessionImpl.java:281)
位于org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.ActainConnection(LogicalConnectionImpl.java:297)
位于org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169)
位于org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)
位于org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)
位于org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1392)
位于org.kriyak.parser.IndexArchiveRapid.indexFile(IndexArchiveRapid.java:70)
位于org.kriyak.parser.IndexArchiveRapid.main(IndexArchiveRapid.java:53)

我只打开了一个conencton,似乎没有泄露。我也用一根线。除了内存使用,我没有调整任何mysql设置。Mysql在控制台上运行良好。为什么会发生这种情况?这是c3p0错误吗?

这是立即发生的还是一段时间后发生的?也就是说,签出最初是否成功,但随后是否像这样挂起?如果是这样,看起来像是连接泄漏。请尝试设置c3p0参数unreturnedConnectionTimeout和DebuggeUnreturnedConnectionsTackTraces以查看是否存在泄漏。看见

如果立即发生这种情况,如果没有成功签出任何连接,问题是池是否成功获取连接。默认情况下,如果它从未成功过,大约30秒后,您的线程将因失败而中断。(看起来您并没有这样做,但例如,如果您将AcquisitioneTryAttents设置为零,c3p0可能会无限期挂起等待连接。)

要调试c3p0问题,捕获c3p0在池初始化时在信息级别转储到日志的版本和配置信息很有帮助


祝你好运

此外,您似乎还没有初始化c3p0的checkoutTime参数,该参数指定客户端从连接池获取连接所需的等待时间


请参见

您可能需要增加c3p0.numHelperThreads。助手线程负责创建新的数据库连接并将其添加到池中。如果没有足够的线程来满足需求,那么应用程序线程将被困在waitAvailable()中等待。要确认这一点,请查看所有HelperThreads,看看它们是否都在使用中以及是否正在连接到数据库。

这是应用程序中唯一的线程吗?是的,这是我没有关闭基础连接的唯一线程,这是在我的案例中明确要求的。