Java JDBC挂起查询客户端恢复

Java JDBC挂起查询客户端恢复,java,sql-server,jdbc,timeout,Java,Sql Server,Jdbc,Timeout,我正在运行Microsoft JDBC驱动程序和DBCP的组合,并看到一个查询挂起: ... at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1654) ~[sqljdbc4-3.0.jar:na] at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3694) ~[sqljdbc4-3.0.jar:na]

我正在运行Microsoft JDBC驱动程序和DBCP的组合,并看到一个查询挂起:

    ...
    at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1654) ~[sqljdbc4-3.0.jar:na]
    at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3694) ~[sqljdbc4-3.0.jar:na]
    at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:5022) ~[sqljdbc4-3.0.jar:na]
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:388) ~[sqljdbc4-3.0.jar:na]
    ...
将驱动程序配置为非零查询超时没有帮助(当它在从套接字读取时挂起时,似乎是另一种类型的超时)

我不想更改应用程序的套接字读取超时

现在我已经改为C3P0池,它有基于超时的强制连接收集器,我不太喜欢它,但除非我找到更好的选择,否则我将不得不使用它

那么,问题来了 有人知道这个问题和潜在的细节吗? 你认为最好的处理方法是什么


谢谢

如果您可以直接访问java.sql.Statement,请尝试设置超时

statement.setQueryTimeout(int seconds);

您可以发布挂起的查询吗。在我看来,BoneCP是更好的解决方案opinion@sheldonCooper-查询是一个存储过程调用,DB端某些嵌套代码中的错误是导致挂起的原因,我手头没有SQL。为什么BoneCP更好?有了BoneCP,您可以拥有我认为其他人不可能拥有的分区,这与将“queryTimeout=xxx;”传递给驱动程序不同吗?我第一件事就试过了,但没用我想也是一样