【问题标题】:query timeout in mysql via c3p0通过 c3p0 在 mysql 中查询超时
【发布时间】:2014-11-25 19:32:51
【问题描述】:

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

minPoolSize
maxPoolSize
maxIdleTime
preferredTestQuery

但我在徘徊如何设置查询超时,即假设查询需要超过 200 毫秒然后放弃而不是无限等待它。你将如何通过 c3p0 实现这一点。我知道如何通过普通的 JDBC 来设置它,即Statement.setQueryTimeout(),但如何通过 c3p0 来做同样的事情。或者有没有其他办法?

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

【问题讨论】:

    标签: java mysql c3p0


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2012-02-29
      • 1970-01-01
      • 2015-10-13
      • 2014-12-23
      相关资源
      最近更新 更多