Как я могу проверить, работают ли MySQL и Tomcat? - PullRequest
6 голосов
/ 13 августа 2010

Я создал приложение Java, которое разделено на разные подкомпоненты, каждый из которых запускается в отдельном экземпляре Tomcat. Кроме того, некоторые компоненты используют базу данных MySQL через Hibernate.

Сейчас я создаю консоль администрирования, в которой сообщается о состоянии всех моих экземпляров Tomcat и MySQL. Мне не нужна подробная информация, но достаточно знать, запущены они или нет.

Что может быть лучшим решением для этого?

Спасибо

Ответы [ 7 ]

4 голосов
/ 13 августа 2010

Самый простой способ - просто подключить сервер и посмотреть, успешно ли он работает.

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!
}

Если вы хотитенемного более конкретный статус, например, проверка, доступна ли определенная таблица БД или конкретный ресурс веб-приложения, тогда вам нужно запустить более конкретный оператор SELECT или запрос HTTP соответственно.

3 голосов
/ 13 августа 2010

Я предполагаю, что вы знаете, какие порты запущены заранее (или из файлов конфигурации).Самый простой способ проверить это - подключить сокеты к этим портам, как это делает программа 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, но сервер завис или не отвечает...

1 голос
/ 13 августа 2010

Я бы позаботился о том, чтобы то, что вы когда-либо отслеживали, на самом деле выполняло некоторый код. Мониторинг JVM через jmx также может быть полезен после свершившегося факта. Выезд http://www.cacti.net/.

0 голосов
/ 13 августа 2010

Я бы создал простой веб-сервис REST, который запускается на каждом экземпляре Tomcat и выполняет неактивный запрос к базе данных.Это позволяет легко управлять из любого места (командная строка, веб-приложение, приложение с графическим интерфейсом и т.приложение.

0 голосов
/ 13 августа 2010

Создайте сервлет как страницу состояния. В сервлете выполните дешевый запрос, если запрос завершится, пусть сервлет напечатает OK, иначе ошибка. Поместите сервлета в войну и разверните его во всех случаях.

Это можно использовать для проверок в консоли администратора, выполнив цикл для всех экземпляров.

0 голосов
/ 13 августа 2010

Самое простое - поискать PID-файлы MySQL и Tomcat.Вам нужно посмотреть свои стартовые скрипты, чтобы убедиться в точном расположении, но как только вы его найдете, вы просто проверяете наличие pid-файла.

0 голосов
/ 13 августа 2010

Выполнение простого фиксированного запроса через MySQL

SELECT 'a-ok';

и получите .jsp, возвращающий текст a-ok. Если время ожидания истекло и / или он не отвечает a-ok, значит, что-то странное. Если вам нужно что-то более подробное, вы можете добавить дополнительные проверки, такие как запрос now() или что-то большее, например SHOW INNODB STATUS.

...