7

組み込みのjettyサーバーをプログラムでシャットダウンする方法は?

次のようにjettyサーバーを起動します。

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

ここで、http: //127.0.0.1 :8090/shutdownなどのリクエストからシャットダウンしたいのですが、 どうすればきれいにできますか?

一般的に提案されている解決策は、スレッドを作成し、このスレッドから server.stop() を呼び出すことです。しかし、サーブレットがシャットダウン要求の処理を完了したことを確認するために、Thread.sleep() の呼び出しが必要になる可能性があります。

4

3 に答える 3

6

ここで非常にきれいなきちんとした方法を見つけました

魔法のコード スニペットは次のとおりです。

        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();

シャットダウンは別のスレッドから実行されているため、それ自体でつまずくことはありません。

于 2013-09-05T06:56:40.340 に答える
2

試してみてくださいserver.setGracefulShutdown(stands_for_milliseconds);

に似ていると思いますthread.join(stands_for_milliseconds);

于 2011-06-16T23:48:40.660 に答える
1

JettyサーバーをHTTPリクエストを介してリモートでシャットダウンする機能を持つことは、潜在的なセキュリティの脅威として提供されるため、お勧めできません。ほとんどの場合、ホスティングサーバーにSSHで接続し、そこで適切なコマンドを実行して、Jettyサーバーのそれぞれのインスタンスをシャットダウンするだけで十分です。

基本的な考え方は、シャットダウン要求を処理するためのサービススレッドとして機能する別のスレッドをJettyスタートアップコードの一部として開始することです(したがって、コメントの回答に記載されているものの1つで必要とされるようにスリープする必要はありません)。このスレッドでは、aServerSocketをローカルホストと指定されたポートにバインドでき、予期されたメッセージを受信すると、を呼び出しますserver.stop()

このブログ投稿では、上記のアプローチを使用した詳細な説明を提供しています。

于 2012-03-14T14:35:53.800 に答える