我跑进确切的问题是setNetworkTimeout应该根据解决甲骨文 。 查询被困在socket.read()几分钟。
但我根本不知道什么这个方法的第一个参数需要。 提交无效引起的AbstractMethodError例外,所以...没有实施真正需要某种线程池的只是设置一个网络超时?
是否有某种方式来实现,而无需运行一个线程池只为这一个条件相同的效果?
我跑进确切的问题是setNetworkTimeout应该根据解决甲骨文 。 查询被困在socket.read()几分钟。
但我根本不知道什么这个方法的第一个参数需要。 提交无效引起的AbstractMethodError例外,所以...没有实施真正需要某种线程池的只是设置一个网络超时?
是否有某种方式来实现,而无需运行一个线程池只为这一个条件相同的效果?
这似乎是文档解释了这个可怕的,但不看类后面的任何代码,我的猜测是,你预计一个Executor实例传递给方法,以便实现可以为了检查的状态产卵工作/线程连接。
由于连接读取将阻塞,为了实现任何类型的超时逻辑,这是需要有除了阅读其中一个可以检查连接的状态另一个线程。
这听起来像一个设计作出决定,与其内部如何/何时产生线程来处理这个问题,实现逻辑的JDBC驱动程序,API希望你的客户端将被用来检查在一个Executor传递超时。 这样,您的客户端可以控制的事情,如检查频率执行,防止它放到你的货柜产卵多个线程比你喜欢,等
如果您还没有一个Executor实例周围你可以创建一个默认之一:
conn.setNetworkTimeout(Executors.newFixedThreadPool(numThreads), yourTimeout);
至于Postgres的JDBC驱动程序而言(PostgreSQL相关42.2.2.jar),该setNetworkTimeout实现不使用执行人的参数。 它只是设置指定的超时为使用Socket的方法的基础套接字的超时。
它看起来像java.sql.Connection接口是尽量不做出关于实施任何假设,并提供了如果实现需要它可用于执行人。