Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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 当我尝试在web应用程序中创建250多个线程时,我发现无法获得连接,池错误等待空闲对象超时_Java_Mysql_Hibernate - Fatal编程技术网

Java 当我尝试在web应用程序中创建250多个线程时,我发现无法获得连接,池错误等待空闲对象超时

Java 当我尝试在web应用程序中创建250多个线程时,我发现无法获得连接,池错误等待空闲对象超时,java,mysql,hibernate,Java,Mysql,Hibernate,可能重复: 当我尝试在我的web应用程序中创建250多个线程时,我发现无法获得连接,池错误等待空闲对象错误超时。我正在使用JSF2.0和Hibernate创建web应用程序 我尝试过修改hibernate.xml、server.xml、context.xml和mysql属性 以下是我得到的信息。 WARN (JDBCExceptionReporter.java:233) - SQL Error: 0, SQLState: null ERROR (JDBCExceptionReporter.ja

可能重复:

当我尝试在我的web应用程序中创建250多个线程时,我发现无法获得连接,池错误等待空闲对象错误超时。我正在使用JSF2.0和Hibernate创建web应用程序

我尝试过修改hibernate.xml、server.xml、context.xml和mysql属性

以下是我得到的信息。

WARN (JDBCExceptionReporter.java:233) - SQL Error: 0, SQLState: null
ERROR (JDBCExceptionReporter.java:234) - Cannot get a connection, pool error Timeout waiting for idle object
ERROR (BaseServlet.java:301) - ******** java.lang.Thread.getStackTrace(Thread.java:1426)
    Caused by: org.hibernate.exception.GenericJDBCException: Cannot open connection
    org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
    org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
    org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
    org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
    org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
    org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160)
    org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81)
    org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
    sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source)
    Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
    org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114)
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
    org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92)
    org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
    org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
    org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160)
    org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81)
    org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
    sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
    org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1144)
    org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
    org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
    org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92)
    org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
    org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
    org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160)
    org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81)
    org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
    sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source)

如果您对此有任何想法,请帮助我……

我以前遇到过这样的问题,您需要做的是
完成后关闭休眠会话。

e、 g


可能您已经为“死”连接设置了超时,有些查询需要的时间要比这个时间长。这意味着您的池将一个繁忙连接作为“死”从池中删除,并从数据库请求另一个连接,直到数据库拔出插头

若要对此进行调试,为连接池启用日志记录,以便您可以看到它何时请求新连接


同时检查您的mysql连接设置。下次使用dbcoz时,请尝试关闭连接(超出
maxConnectionAge
限制)该连接状态将为“死”

你好,谢谢你的回复。你好,谢谢我的问题通过context.xml文件中的更改得到了解决。我已经更改了context.xml.file maxActive=“-1”maxIdle=“-1”maxWait=“-1”-1表示没有限制。@Ganesh请发布你的答案,如果你自己解决了这个问题,或者不管哪个答案对你有帮助,都要把它标记为已被接受。祝你好运:)@Ganesh有一件事你不应该这样做,它会使你的连接休眠,正如我建议的,打开连接工作关闭连接这个问题是由协议时间延迟引起的。我调试并解决了协议问题,之后我就不会得到那个异常了。
Session sess = factory.openSession();
 Transaction tx;
 try {
     tx = sess.beginTransaction();
     //do some work
     ...
     tx.commit();
 }
 catch (Exception e) {
     if (tx!=null) tx.rollback();
     throw e;
 }
 finally {
     sess.close(); // closing session
 }