Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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 Basicdatasource连接超时问题(使用mysql)_Java_Mysql_Timeout_Connection Pooling - Fatal编程技术网

Java Basicdatasource连接超时问题(使用mysql)

Java Basicdatasource连接超时问题(使用mysql),java,mysql,timeout,connection-pooling,Java,Mysql,Timeout,Connection Pooling,我正在应用程序中使用BasicDatasource。此应用程序正在处理大量原始数据。有时一次查询可能需要15分钟以上。(使用mysql作为数据库) 这里是我的问题,我从池中获取一个连接,然后对它执行几个查询。但是当我使用同一个连接超过15分钟时,我会得到下面的错误。在mysql服务器中,max_wait设置为180小时,因此保持连接处于活动状态应该没有问题,并且没有防火墙规则设置来杀死超过一定时间的活动连接 你觉得我在这里错过了什么 The last packet successfully re

我正在应用程序中使用BasicDatasource。此应用程序正在处理大量原始数据。有时一次查询可能需要15分钟以上。(使用mysql作为数据库)

这里是我的问题,我从池中获取一个连接,然后对它执行几个查询。但是当我使用同一个连接超过15分钟时,我会得到下面的错误。在mysql服务器中,max_wait设置为180小时,因此保持连接处于活动状态应该没有问题,并且没有防火墙规则设置来杀死超过一定时间的活动连接

你觉得我在这里错过了什么

The last packet successfully received from the server was 928,374 milliseconds ago.  The last packet sent successfully to the server was 928,374 milliseconds ago.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
        at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3055)
        at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2941)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3489)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2562)
        at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1664)
        at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1583)
        at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
        at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
        at com.adsclick.logs.cron.adsclickv261.global.ProcessBase.executeUpdate(ProcessBase.java:766)
您可以尝试的事情:

  • setMaxWait(-1)
    在基本CDATA源上。这告诉它无限期地等待连接

  • 检查MySQL服务器上的
    wait_timeout
    是否设置为默认8小时

  • 在JDBC URL上设置
    ?autoReconnect=true

  • settstonbrow(true)
    在基本CDATA源代码上。这将防止它发送过时的连接,但会增加应用程序的开销(尽管如果你已经有这么长的单个查询,你可能根本不会注意到这一部分)

  • 总的来说,我觉得继续重复使用连接是个坏主意。对我来说,拥有一个游泳池的意义在于我不必这样做

    您的查询是事务性的吗?某个很长的查询是否锁定了主表?

    您可以尝试的事情:

  • setMaxWait(-1)
    在基本CDATA源上。这告诉它无限期地等待连接

  • 检查MySQL服务器上的
    wait_timeout
    是否设置为默认8小时

  • 在JDBC URL上设置
    ?autoReconnect=true

  • settstonbrow(true)
    在基本CDATA源代码上。这将防止它发送过时的连接,但会增加应用程序的开销(尽管如果你已经有这么长的单个查询,你可能根本不会注意到这一部分)

  • 总的来说,我觉得继续重复使用连接是个坏主意。对我来说,拥有一个游泳池的意义在于我不必这样做

    您的查询是事务性的吗?某个很长的查询是否锁定了一个主表