繁体   English   中英

通过c3p0在mysql中查询超时

[英]query timeout in mysql via c3p0

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

minPoolSize
maxPoolSize
maxIdleTime
preferredTestQuery

但是我在徘徊如何在查询上设置超时,即假设查询时间超过200毫秒,那么就放弃而不是无限期地等待它。 您将如何通过c3p0实现这一目标。 我知道如何通过简单的JDBC即Statement.setQueryTimeout()进行设置,但如何通过c3p0进行相同的设置。 还是还有其他方法?

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

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

c3p0是纯JDBC。 根据JDBC规范,它提供透明的连接池。 透明意味着在这种情况下,API不会更改,带或不带缓冲池的代码应基本相同。 与对其他任何语句一样,欢迎您对从c3p0托管的连接派生的Statement.setQueryTimeout()调用Statement.setQueryTimeout()

通常,当检出连接时,c3p0不会干扰连接。 客户端应用程序使用Connection之后,c3p0会观察到但不会与客户端应用程序的行为发生太多混乱。 对此的主要例外是config参数unreturnedConnectionTimeout ,它旨在帮助调试或解决连接泄漏。 [查看此处 ]实际情况是,您可以使用unreturnedConnectionTimeout来执行所需的操作,强制放弃较慢的查询,尽管这种方式相当残酷。 在设置的时间段后, unreturnedConnectionTimeout将强制未返回的Connection被关闭(),并且池通常将必须获得替换。 不过,在尝试“ unreturnedConnectionTimeout”之前,我先从Statement.setQueryTimeout开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM