Программная остановка причала - PullRequest
7 голосов
/ 19 апреля 2011

Как программно завершить работу встроенного сервера Jetty?

Я запускаю сервер Jetty следующим образом:

Server server = new Server(8090);
...
server.start();
server.join();

Теперь я хочу выключить его из запроса, такого как http://127.0.0.1:8090/shutdown Как мне сделать это чисто?

Обычно предлагаемое решение заключается в создании потока и вызове server.stop () из этого потока.Но мне, возможно, нужен вызов Thread.sleep (), чтобы убедиться, что сервлет завершил обработку запроса на отключение.

Ответы [ 3 ]

6 голосов
/ 05 сентября 2013

Я нашел очень чистый аккуратный метод здесь

Фрагмент магического кода: -

        server.setStopTimeout(10000L);;
        try {
            new Thread() {
                @Override
                public void run() {
                    try {
                        context.stop();
                        server.stop();
                    } catch (Exception ex) {
                        System.out.println("Failed to stop Jetty");
                    }
                }
            }.start();

Поскольку завершение работы выполняется из отдельного потока, ононе спотыкается о себя.

2 голосов
/ 17 июня 2011

Попробуйте server.setGracefulShutdown(stands_for_milliseconds);.

Я думаю, что это похоже на thread.join(stands_for_milliseconds);.

1 голос
/ 14 марта 2012

Возможность удаленного отключения сервера Jetty через HTTP-запрос не рекомендуется, поскольку это представляет потенциальную угрозу безопасности.В большинстве случаев должно быть достаточно SSH к хост-серверу и выполнить там соответствующую команду для отключения соответствующего экземпляра сервера Jetty.

Основная идея заключается в том, чтобы запустить отдельный поток как часть кода запуска Jetty(поэтому нет необходимости спать, как требуется в одном из упомянутых в комментариях ответов), который будет служить служебным потоком для обработки запросов на завершение работы.В этой теме ServerSocket может быть привязан к локальному хосту и указанному порту, и при получении ожидаемого сообщения он будет вызывать server.stop().

В этом блоге содержится подробноеобсуждение с использованием вышеуказанного подхода.

...