我创建了一个分为不同子组件的Java应用程序,每个子组件都在一个单独的Tomcat实例上运行。此外,一些组件通过Hibernate使用MySQL数据库。
我现在正在创建一个管理控制台,它会报告我所有Tomcat实例和MySQL的状态。我不需要详细信息,但知道它们是否正在运行就足够了。
这可能是最好的解决方案吗?
由于
答案 0 :(得分:4)
最直接的方法是连接服务器并查看是否成功。
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请求。
答案 1 :(得分:3)
我假设您知道其端口正在运行(或从配置文件中)。最简单的检查方法是像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);
但是,我会说这是一个假阴性检查..有时它说服务器UP但服务器卡住或没有响应......
答案 2 :(得分:1)
我会确保监控您设置的内容实际上是在运行一些代码。事后,通过jmx监视JVM也会有所帮助。查看http://www.cacti.net/。
答案 3 :(得分:0)
通过MySQL解决一个简单的固定查询
SELECT 'a-ok';
并让.jsp返回a-ok
文本。如果它超时和/或没有用a-ok
回复,那么就会出现一些问题。如果您需要更详细的内容,可以添加额外的检查,例如请求now()
或更大的内容,例如SHOW INNODB STATUS
。
答案 4 :(得分:0)
最简单的方法是查找MySQL和Tomcat PID文件。您需要查看起始脚本以确保确切的位置,但一旦找到它,您只需测试pid文件是否存在。
答案 5 :(得分:0)
创建一个servlet作为状态页面。在servlet中执行廉价查询,如果查询成功则让servlet打印OK,否则出错。将servlet置于战争中并将其部署到所有实例。
这可以通过对所有实例进行循环来用于管理控制台中的检查。
答案 6 :(得分:0)
我将创建一个在每个Tomcat实例上运行的简单REST Web服务,并对数据库执行无操作查询。这使得从任何地方(命令行,Web应用程序,GUI应用程序等)轻松驾驶
如果这些是公开的服务器,您可以使用像binarycanary.com这样的服务来轮询您应用中的网页或服务。