組み込みのjettyWebサーバーを使用する小さなサーバーアプリケーションを開発しています。サービスはTCPポートにバインドされ、バックグラウンドで実行されます。アプリケーションが終了しないため(サービスです)、再実行する前にプロセスを手動で終了する必要があります(たとえば、TCPポートが現在のプロセスで使用されているため)。
Eclipseで、現在のプロセスを再起動する直前に自動的に終了することは可能ですか?
組み込みのjettyWebサーバーを使用する小さなサーバーアプリケーションを開発しています。サービスはTCPポートにバインドされ、バックグラウンドで実行されます。アプリケーションが終了しないため(サービスです)、再実行する前にプロセスを手動で終了する必要があります(たとえば、TCPポートが現在のプロセスで使用されているため)。
Eclipseで、現在のプロセスを再起動する直前に自動的に終了することは可能ですか?
Jetty には、通常のシャットダウンをトリガーできる秘密鍵を使用して localhost からの接続を受け入れるハンドラー チェーンに接続できる ShutdownHandler もあります。
別の方法として、別のポートで停止キーが渡されるのをリッスンするだけの Server オブジェクトへの参照を使用して、独自のコンポーネントを接続することもできます。
コマンドラインでは、'jps' が Java プロセスのリストを取得する最も便利な方法です。
Eclipse構成を使用するのではなく、コードの方法で行うことができます。アプリケーションを起動するときは、システムで実行されているプロセスを確認し、起動するプロセスを検索してください。そのアプリケーションが実行されていることがわかった場合は、それに kill シグナルを送信してから、起動を続行します。それが役立つことを願っています。また、Eclipseも使用していない場合は、常に機能します。:P
これは、私が 1、2 年前に書いたスニペットで、それ以来、うまく機能しています。パッケージ宣言を追加するだけです。main() など、ポートを所有するプロセスを強制終了したい場所からこれを呼び出します。
import java.io.IOException;
public class KillPortHolderSimple {
public static void killHolderOfPort(int port) {
final String how = "-KILL";
try {
Runtime.getRuntime().exec(new String[]{"sh", "-c", "lsof -i :" + port + " -t | xargs kill " + how});
} catch (IOException e) {
e.printStackTrace();
}
}
}