組込み Jetty と JVM を停止する方法を書いていきます。今回のコードは、サーバー上で動いているプログラム(サーブレットなど)から実行するものになります。
停止方法1
次のようなコードで停止することができます。
Server server = ... server.setStopAtShutdown(true); (new Thread() { public void run() { System.exit(0); } }).start();
新しいスレッドで JVM を停止する感じです。事前に Server.setStopAtShutdown(true);
を実行して、サーバーも停止させるようにしておきます。
停止方法2
JVM を停止するスレッド内で、Server.stop();
を実行しても大丈夫そうです。Server.stop();
だけだと、JVMは停止されないようです。
補足. セキュリティ面について
不特定多数に公開しているサービスは、セキュリティ面を考慮したほうが良さそうです。誰でも停止処理を実行できるようにすると、攻撃を受けてサービスが提供できなくなったりする可能性があります。
参考文献
Jetty の ShutdownHandler.java - GitHub を参考にさせて頂きました。