【发布时间】:2011-06-01 23:33:03
【问题描述】:
Java 中是否有特定的方法来检查 MySQL 服务器是否处于活动状态?
【问题讨论】:
Java 中是否有特定的方法来检查 MySQL 服务器是否处于活动状态?
【问题讨论】:
假设您在 Java 6 或更高版本中运行,您可以使用标准 JDBC 方法Connection.isValid(int timeoutInSecs)。深入 MySQL Connector/J 源码,实际实现使用 com.mysql.jdbc.ConnectionImpl.pingInternal() 向 DB 发送简单的 ping 数据包,只要返回有效响应就返回 true。
【讨论】:
标准 MySQL JDBC 连接器 ConnectorJ 具有轻量级 ping。来自the docs:
MySQL Connector/J 能够对服务器执行轻量级 ping,以验证连接。在负载平衡连接的情况下,这是针对保留的所有活动池内部连接执行的。这有利于使用连接池的 Java 应用程序,因为连接池可以使用此功能来验证连接。
基本上,确保您的“ping”查询以完全文本/* ping */ 开头。 the linked docs above 中的详细信息。这让您可以利用 ping 机制,而不是执行(稍微)较重的操作。
所以基本上,做查询:
/* ping */ SELECT 1
...将触发 ping 机制,而不是实际执行 SELECT 1 的“工作”。
请注意,如果您正在谈论检查您当前未连接到的 MySQL 服务器,只需连接到该服务器即可验证它是否存在并做出响应。以上主要是关于检查现有连接是否仍然有效。
【讨论】:
这取决于您使用什么方法连接到数据库。一些驱动程序,例如MySQL Connector/J 确实有一个 ping 命令:
/**
* Detect if the connection is still good by sending a ping command
* to the server.
*
* @throws SQLException
* if the ping fails
*/
public abstract void ping() throws SQLException;
如果您的接口不支持此功能,那么一个始终有效的简单方法是像往常一样连接到数据库并执行以下查询:
SELECT 1
您应该返回一个包含单行、单列、包含值 1 的结果集。如果成功,您的 MySQL 正在工作。
【讨论】: