java - 如何使用 Java.sql.Connection.setNetworkTimeout?

标签 java sql networking timeout

我遇到了 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/

相关文章:

java - jpcap.packet.Packet 无法转换为 jpcap.packet.TCPPacket

java - 每次在多对多关系中插入新数据时,以前的数据都会被删除

java - 如何在mockito中将数组的数组与相同的值进行匹配

sql - 从一个表插入另一个表并激活触发器

mysql - 在这里选择点赞数的 sum()

java - 如果端口对多播组无关紧要,为什么 DatagramSocket.joinGroup() 方法采用 SocketAddress?

java - 如何用更少的内存提高字符串处理的性能?

java - 无法在 onPostExecute 内更新/重绘 listView

mysql - union 用于返回默认输出

c - linux下使用C实现广播后获取IP地址