【发布时间】:2016-06-16 04:50:29
【问题描述】:
您好,这个问题应该适用于比 c3p0 更多的连接池管理器,但我会以那个为例。
c3p0 为连接池管理提供的一个选项是在连接被检入连接池之前对其进行测试。 这是否意味着在应用程序使用了连接之后?如果是这样,如果它只是被应用程序使用,连接不是总是有效的吗?
除非我的理解是错误的,否则这似乎是检查连接是否有效的无用时间,因为无效的连接会在应用程序尝试使用它时引发异常。
更新: 我要问的真正问题是,刚刚在应用程序中失败的陈旧连接是否仍会被检查回池中以最终一次又一次地失败?如果答案是否定的,那么签入测试将毫无意义,因为“爆炸”连接永远不会被发送回池。多年来,我一直在使用 c3p0 和 testOnCheckIn 和测试查询间隔,但实际上并没有深入了解原因。
【问题讨论】:
-
无论如何这都是浪费时间,因为唯一感兴趣的问题是当您out 时连接是否有效。 这是测试它的时候了。唯一可能的好处是不要将陈旧的连接池化,这可能会在客户端节省空间,但它不会使服务器受益,如果它在客户端没有测试为有效,它显然已经关闭了它的末端。
-
@EJP 那么你同意我的假设吗?这确实是浪费时间。
-
我写的东西有什么不清楚的地方吗?
-
@EJP 只需再次确认,因为 testOnCheckout 是支持 c3P0 的人推荐的方法。出于性能原因,文档警告不要使用 testOnCheckOut,但我最终将不可避免地这样做,因为对每个事务的简单查询是我当前负载可以承受的。谢谢。
标签: java hibernate connection-pooling c3p0