java - 通过c3p0在mysql中查询超时

标签 java mysql c3p0

我使用 c3p0 作为连接池,使用 ebean 作为 ORM 实现。目前我正在 c3p0 池中设置以下属性:

minPoolSize
maxPoolSize
maxIdleTime
preferredTestQuery

但是我想知道如何设置查询超时,即假设如果查询花费超过 200 毫秒,那么就放弃而不是无限等待。您将如何通过 c3p0 实现这一目标?我知道如何通过普通 JDBC 进行设置,即 Statement.setQueryTimeout() 但如何通过 c3p0 进行相同的操作。或者还有其他办法吗?

maxIdleTime,我提到的查询超时会做同样的事情,即在一段时间后如果我们没有得到响应就会终止连接? 提前致谢。

最佳答案

不,maxIdleTime 与查询可以运行的时间无关。它定义了连接在过期和被销毁之前允许在池中闲置的时间。

c3p0 是普通的 JDBC。根据 JDBC 规范,它提供透明连接池。透明意味着在这种情况下 API 不会改变,无论有没有池,您的代码都应该基本相同。欢迎您对从 c3p0 管理的连接派生的语句调用 Statement.setQueryTimeout(),就像调用任何其他语句一样。

一般来说,c3p0 在 check out 连接时不会干扰连接。一旦客户端应用程序使用连接,c3p0 就会观察但不会干扰客户端应用程序的操作。主要的异常(exception)是配置参数 unreturnedConnectionTimeout ,旨在帮助调试或解决连接泄漏。 [参见here ] 在真正的紧要关头,您可以使用 unreturnedConnectionTimeout 来做您想做的事情,强制放弃较慢的查询,尽管是以相当残酷的方式。 unreturnedConnectionTimeout 将强制未返回的 Connection 在设定的时间段后关闭,并且池通常必须获取替换连接。不过,在尝试“unreturnedConnectionTimeout”之前,我会先从 Statement.setQueryTimeout 开始。

关于java - 通过c3p0在mysql中查询超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27135123/

相关文章:

java - Tomcat - 图像不显示

java - id 的数据类型应该是什么?

mysql - Laravel 计数类别加入

java - Hibernate C3P0设置性能问题

gradle - 使用gradle-flyway插件创建测试数据库后,如何引用c3p0 config中创建的数据库?

java - 请求未从 jsp 页面转发到调度程序 servlet

java - 为什么我的 Logback 生成的日志文件的每一行开头都有一个空格?

MySQL 与 Node.js

mysql - 在 MySQL 中按数字顺序排序,然后按字母顺序排序

spring - 如何在 Spring+Hibernate+C3P0 环境中构建/获取 ConnectionProvider?