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

Kri*_*nis 4 java sql networking timeout

我遇到了setNetworkTimeout应该根据Oracle解决的确切问题.查询卡在socket.read()中几分钟.

但我不知道这个方法的第一个参数需要是什么.提交null会导致AbstractMethodError异常,所以......实现是否真的需要某种线程池才能设置网络超时?

有没有办法在没有为这一个条件运行线程池的情况下实现相同的效果?

mat*_*t b 10

似乎文档解释了这个可怕的,但是没有查看类后面的任何代码,我的猜测是你应该将Executor实例传递给方法,以便实现可以生成作业/线程以检查状态连接.

由于连接读取将被阻塞,为了实现任何类型的超时逻辑,除了读取之外还需要另一个线程来检查连接的状态.

这听起来像是一个设计决策,而不是内部实现逻辑的JDBC驱动程序,如何/何时产生线程来处理这个,API希望你作为客户端传入将用于检查的执行程序超时.这样你作为客户端就可以控制检查执行的频率,防止它在你的容器中产生比你想要的更多的线程,等等.

如果您还没有Executor实例,则只需创建一个默认实例:

conn.setNetworkTimeout(Executors.newFixedThreadPool(numThreads), yourTimeout);
Run Code Online (Sandbox Code Playgroud)