gpt4 book ai didi

java - 在调用 PreparedStatement 时以毫秒为单位设置查询超时,而不是秒?

转载 作者:行者123 更新时间:2023-12-03 08:04:34 26 4
gpt4 key购买 nike

有没有办法以毫秒而不是秒为单位设置查询超时? java.sql.Statement API 只有秒的方法,但对于我的用例来说,即使是 1 秒也太慢了。

Java API:http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#setQueryTimeout(int)

我正在使用 Oracle 数据库。

最佳答案

这很复杂,但可以工作:

  • 有一个 ExecutorService
  • 为查询创建一个 Callable
  • 将可调用文件提交给 ExecutorService
  • Future<ResultType>将有一个“get(Long, TimeUnit)”函数,最多阻塞到设置的超时时间——它具有可配置的粒度(至少它 promise 是这样的......
  • )

    在几乎 Java 代码中是这样的:
    public class MyCallable implements Callable<ResultType> {
    @Override
    public ResultType call() throws Exception {
    //do query, with 1s timeout - that way no thread will be busy for more than 1s
    return result;
    }
    }

    处理请求
    ExecutorService threadPool; //initialised somewhere earlier

    Future<ResultType> futureResult = threadPool.submit(new MyCallable());
    try {
    ResultType result = futureResult.get(100, TimeUnit.MILLISECONDS);
    //results received in time, do the processing here
    } catch(TimeoutException e) {
    //request too slow -- handle it
    } catch( other exceptions...) { ... }

    关注点:
  • 我不知道这意味着多少开销...
  • 超时:我不知道他们将如何处理。
  • 超时的请求将被卡在线程池中,直到内部的 JDBC 超时(1 秒)开始...
  • 线程池:如果固定,可能是一个瓶颈(见上面的关注),如果动态:可能是一个开销
  • 关于java - 在调用 PreparedStatement 时以毫秒为单位设置查询超时,而不是秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898671/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com