在重新发明了几次轮子实现自己的数据库连接池之后,我终于决定尝试一下 c3p0。一旦您阅读了文档,它似乎就很容易使用和配置。
我在文档中找不到的一件事是如何通过监听器或其他机制检测数据库何时使用 c3p0 关闭或启动。在我们的应用程序中,我需要告诉客户端数据库已关闭,因此它无法发送需要记录在数据库中的某些订单。我想知道是否有一种标准方法可以使用 c3p0 检测这些更改,或者我必须自己实现一个外部线程,通过执行简单的 select 语句定期查询数据库。
我觉得这个功能在连接池中是必须的,而且一定有办法使用 c3p0 来做到这一点,但我就是找不到它。如果这不存在,我想再次重新发明轮子。
最佳答案
连接池无法知道数据库甚至其连接的状态,直到对它们执行某些操作。至少某些连接池可以配置为在一定时间后重新创建连接,因此池会在此时注意到出现问题。还有其他机制,例如在发出连接之前执行测试查询,以验证连接是否有效。
如果您想跟踪状态,除了自己轮询数据库之外别无选择。
关于java - c3p0:检测数据库关闭/打开事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33516333/