我遇到了 setNetworkTimeout 应该根据 Oracle 解决的确切问题.查询在 socket.read() 中卡住了几分钟。
但是我不知道这个方法的第一个参数需要是什么。提交 null 会导致 AbstractMethodError 异常,那么...实现实际上是否需要某种线程池来设置网络超时?
有没有什么方法可以达到相同的效果,而无需仅为这种情况运行线程池?
最佳答案
文档似乎对此进行了可怕的解释,但在不查看类背后的任何代码的情况下,我的猜测是您应该将 Executor 实例传递给该方法,以便实现可以生成作业/线程以检查连接状态。
由于连接读取会阻塞,为了实现任何类型的超时逻辑,除了读取线程之外还需要另一个线程来检查连接状态。
这听起来像是做出了一个设计决定,而不是 JDBC 驱动程序在内部实现逻辑,即如何/何时生成线程来处理这个问题,API 希望您作为客户端传递一个 Executor,该 Executor 将用于检查超时。通过这种方式,作为客户端的您可以控制检查执行的频率、防止它在您的容器中产生比您喜欢的更多的线程等。
如果您还没有一个 Executor 实例,您可以创建一个默认实例:
conn.setNetworkTimeout(Executors.newFixedThreadPool(numThreads), yourTimeout);
关于java - 如何使用 Java.sql.Connection.setNetworkTimeout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10654547/