0

我有一个HikariCP用于 JDBC 连接池的项目。HikariCP 非常适合我的需求。它还记录池的统计信息,如下所示。

2014-12-03 10:16:08 DEBUG HikariPool:559 - Before cleanup pool stats loginPool (total=8, inUse=0, avail=8, waiting=0)
  2014-12-03 10:16:08 DEBUG HikariPool:559 - After cleanup pool stats loginPool (total=7, inUse=1, avail=7, waiting=0)

仅出于实验目的,我使用 . 关闭了MySQL已配置数据库的所有连接MySQL WorkbenchHikariCP但是,尽管没有与数据库的实际连接,但我仍然看到像以前一样记录统计信息。当有连接请求时,它立即建立连接(初始 8 个),所以一切正常。

那么,我的问题是如何管理或实施这些连接?我认为记录统计信息的原因HikariCP,就好像有连接一样,是因为它在内存中对连接的引用是有效的,而这些连接实际上是不存在的(带有数据库)。

我的理解正确吗?

4

2 回答 2

1

连接池在启动时创建了 8 个连接。您说您使用工作台断开了它们的连接。大多数连接池在使用之前不会知道连接已断开连接。

你的假设是正确的。您手动终止了连接,但池有一个它假定已连接的 8 个套接字的句柄。给定时间,您的连接池可能已经检查了连接的有效性并尝试重新连接它们。我不能代表 HikariCP,但这就是现代连接池所做的。

于 2014-12-03T05:30:36.267 回答
1

当您使用 MySQL Workbench 关闭连接时,您将在服务器端关闭它们。在 JDBC(客户端)端,之前建立的连接将一直存在,直到客户端代码尝试使用它们。到那时,就会发现它们“坏了”;即客户端在尝试使用它们时会得到异常。

客户端 JDBC 连接对象只有在您的 Java 应用程序代码返回到连接池时才会关闭或回收。

于 2014-12-03T06:44:04.340 回答