Java 如何检查MySQL和Tomcat是否正在运行?
我创建了一个Java应用程序,该应用程序分为不同的子组件,每个子组件都在一个单独的Tomcat实例上运行。另外,一些组件通过Hibernate使用MySQL数据库 我现在正在创建一个管理控制台,其中报告了我的所有Tomcat实例和MySQL的状态。我不需要详细的信息,但知道他们是否在运行就足够了 最好的解决方案是什么Java 如何检查MySQL和Tomcat是否正在运行?,java,mysql,tomcat,administration,Java,Mysql,Tomcat,Administration,我创建了一个Java应用程序,该应用程序分为不同的子组件,每个子组件都在一个单独的Tomcat实例上运行。另外,一些组件通过Hibernate使用MySQL数据库 我现在正在创建一个管理控制台,其中报告了我的所有Tomcat实例和MySQL的状态。我不需要详细的信息,但知道他们是否在运行就足够了 最好的解决方案是什么 感谢通过MySQL启动一个简单的固定查询 SELECT 'a-ok'; 并让.jsp返回a-ok文本。如果它超时和/或没有响应a-ok,那么就有问题了。如果您需要更详细的内容,可
感谢通过MySQL启动一个简单的固定查询
SELECT 'a-ok';
并让.jsp返回
a-ok
文本。如果它超时和/或没有响应a-ok
,那么就有问题了。如果您需要更详细的内容,可以添加额外的检查,比如请求now()
或更大的检查,比如SHOW INNODB STATUS
最简单的事情是查找MySQL和Tomcat PID文件。您需要查看启动脚本以确定确切的位置,但一旦找到它,您只需测试pid文件是否存在。最简单的方法就是连接服务器并查看是否成功
MySQL:
Connection connection = null;
try {
connection = DriverManager.getConnection(url, username, password);
// Succes!
} catch (SQLException e) {
// Fail!
} finally {
if (connection != null) try { connection.close(); } catch (SQLException ignore) {}
}
Tomcat:
try {
new URL(url).openConnection().connect();
// Succes!
} catch (IOException e) {
// Fail!
}
如果您想要更具体的状态,例如检查某个DB表是否可用或某个特定的webapp资源是否可用,则必须分别触发更具体的
SELECT
语句或HTTP请求。创建一个servlet作为状态页。在servlet中,执行便宜的查询,如果查询成功,让servlet打印OK,否则会出现错误。将servlet放入war并将其部署到所有实例
这可以通过在所有实例上执行循环来用于在您的管理控制台中进行检查。我将确保监视您设置的内容实际上是在执行一些代码。事后通过jmx监控JVM也会有所帮助。签出。我将创建一个简单的REST Web服务,它在每个Tomcat实例上运行,并对数据库执行无操作查询。这使得从任何地方(命令行、web应用程序、GUI应用程序等)驾驶都很容易
如果这些是公开可用的服务器,您可以使用binarycanary.com之类的服务来轮询应用程序中的页面或服务。我假设您事先知道哪些端口正在运行(或通过配置文件)。最简单的检查方法是像telnet程序一样,将套接字连接到这些端口。比如:
public boolean isServerUp(int port) {
boolean isUp = false;
try {
Socket socket = new Socket("127.0.0.1", port);
// Server is up
isUp = true;
socket.close();
}
catch (IOException e)
{
// Server is down
}
return isUp;
}
用法:
isTomcatUp = isServerUp(8080);
isMysqlUp = isServerUp(3306);
然而,我想说这是一个假阴性检查。。有时它会说服务器已启动,但服务器被卡住或没有响应…我认为OP需要澄清管理控制台是GUI还是web应用程序。如果它是一个web应用程序,并且托管的服务器关闭了,JSP将不起作用。True,但是无论执行何种操作,ping都会超时并报告服务器关闭。我使用wget和这种类型的往返查询脚本来监视我的服务器,但是如果Apache和/或Tomcat死了,并且没有自己清理呢?如果MySQL或Tomcat进程仍然存在,但由于某种原因它们已经停止响应请求,又会怎样呢?