如何实现JDBC连接?

时间:2014-12-03 05:00:19

标签: java database jdbc connection-pooling hikaricp

我有一个项目,其中我使用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 Workbench连接。但是,我仍然看到HikariCP像以前一样记录统计数据,尽管没有与数据库的实际连接。当有连接请求时,它立即建立连接(初始8),所以一切都很好。

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

我的理解是否正确?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

使用MySQL Workbench关闭连接时,您将在服务器端关闭它们。在JDBC(客户端)端,先前建立的连接将保持存在,直到客户端代码尝试使用它们。那时,他们将被发现“被打破”;即客户端在尝试使用它们时会遇到异常。

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