我遇到了setNetworkTimeout应该根据Oracle解决的确切问题。查询在socket.read()中停留了几分钟。
但是我不知道此方法的第一个参数需要是什么。提交null会导致AbstractMethodError异常,因此…实现是否真的需要某种线程池来设置网络超时?
是否有某种方法可以在不为此情况运行线程池的情况下达到相同的效果?
看来文档似乎对此进行了可怕的解释,但是如果不查看该类背后的任何代码,我的猜测是您应该将Executor实例传递给该方法,以便实现可以生成作业/线程以检查命令的状态。连接。
由于连接读取将阻塞,因此为了实现任何类型的超时逻辑,除了读取线程外,还需要另一个线程可以检查连接状态。
听起来好像是在做一个设计决定,而不是由JDBC驱动程序在内部实现逻辑,而是如何/何时产生线程来处理此问题,API希望您作为客户端传入一个Executor,该Executor将用于检查执行情况。超时。这样,作为客户端的您可以控制检查执行的频率,防止它在您的容器中产生比您期望的线程更多的线程等。
如果您还没有Executor实例,则可以创建一个默认实例:
conn.setNetworkTimeout(Executors.newFixedThreadPool(numThreads), yourTimeout);