我可以为单个查询设置 JDBC 超时吗?

Posted

技术标签:

【中文标题】我可以为单个查询设置 JDBC 超时吗?【英文标题】:Can I set a JDBC timeout for a single query? 【发布时间】:2011-07-20 19:48:31 【问题描述】:

我在 Tomcat 上有一个 Web 应用程序,它处理数据库连接池,并使用 Spring JDBCTemplate 来执行查询。有人要求我实现一个状态页面,该页面将由心跳进程监控以确定服务器是否一切正常。

作为其中的一部分,我想做一个数据库查询以确定与数据库的连接是否正常。理想情况下,由于它只是“从 '中选择 1”,我希望它在 10 秒内快速返回,以表明如果数据库在那段时间内没有响应则表示失败。

但是,我不想将连接更改为正常请求的快速超时。

有没有办法使用原始 JDBC 或 Spring JDBC 包装器设置每个查询的超时?

【问题讨论】:

对于这种场景,我建议将其设置为 1 或 2 秒,这将表明数据库拥塞。 【参考方案1】:

在 Statement(或 PreparedStatement)对象上使用 setQueryTimeout。

【讨论】:

【参考方案2】:

如果您使用 spring 来管理事务,也可以在事务级别指定超时。 @Transactional(timeout=10)

【讨论】:

以上是关于我可以为单个查询设置 JDBC 超时吗?的主要内容,如果未能解决你的问题,请参考以下文章

JDBC 超时不抛出 SQLTimeoutException

为 PLSQL 块或过程中的查询设置超时?

使用jdbc查询impala时的超时问题

Hive JDBC 连接超时

Druid连接池 查询慢 超时

PostgreSQL JDBC 套接字超时不会杀死后台进程