Spring Bootは、起動時にプロセスIDをログに出力していることに気づきました。ここで、このpidを使用してこのプロセスを強制終了し、アプリケーションを再起動するスクリプトを作成します。 Spring Bootはこのpidを取得するためのAPIを提供しますか?ありがとう!
SpringBootはクラスApplicationPidFileWriter
を提供し、それがPIDをファイルに書き込みます。 SpringApplicationにリスナーとして追加することでアクティブ化できます。
SpringApplication springApplication = new SpringApplication(DemoApplication.class);
springApplication.addListeners(new ApplicationPidFileWriter());
springApplication.run(args);
ApplicationPidFileWriter
のコンストラクターは、文字列またはカスタムファイル名のFile
オブジェクトを取ることもできます。次に、そのファイルからPIDを読み取り、スクリプトで使用できます。
私は以下を試しました:-
SpringApplication application=new SpringApplication(StartofdayApplication.class);
application.addListeners(new ApplicationPidFileWriter(new File("C:\\temp\\StartofdayApplication.pid")));
application.run(args);
しかし、ApplicationPidFileWriterが非推奨になり、私の春のバージョンは1.4.7であるため、警告が表示されます。これを実現する別の方法はありますか。
パートV. Spring Boot Actuatorから:本番環境に対応した機能のドキュメント :
Spring-bootモジュールには、プロセスの監視に役立つことが多いファイルを作成するための2つのクラスがあります。
- ApplicationPidFileWriterは、アプリケーションPIDを含むファイルを作成します(デフォルトでは、アプリケーションディレクトリにapplication.pidというファイル名で)。
- WebServerPortFileWriterは、実行中のWebサーバーのポートを含む1つまたは複数のファイルを作成します(デフォルトでは、アプリケーションディレクトリにapplication.portというファイル名で)。
デフォルトでは、これらのライターはアクティブ化されていませんが、以下を有効にすることができます。
- 構成を拡張することによって
- セクション60.2「プログラム的に」
これが60.1拡張構成の部分です:
次の例に示すように、META-INF/spring.factoriesファイルで、PIDファイルを書き込むリスナーをアクティブ化できます。
org.springframework.context.ApplicationListener=\
org.springframework.boot.context.ApplicationPidFileWriter,\
org.springframework.boot.web.context.WebServerPortFileWriter
これにより、起動時にpidとポートの両方の出力が可能になります。
したがって、アイデアはかなり単純です。SpringBootアプリケーションのsrc/main/resources/META-INF
フォルダーに、存在しない場合は、前のコンテンツを含むspring.factories
ファイルを作成して、両方(pidまたはport)を有効にするか、次のようにします。 PID出力のみを有効にします。
org.springframework.context.ApplicationListener=org.springframework.boot.context.ApplicationPidFileWriter
ApplicationPidFileWriterを使用する必要はなく、ApplicationPidを使用するだけです。
SpringApplication springApplication = new SpringApplication(MyApplication.class);
springApplication.run(args);
log.info(new ApplicationPid().toString());
Tasklistコマンドを実行して、アクティブなプロセスを一覧表示すると、その識別子(PID)が表示されます。
スクリプトでそれらをファイルに書き込むこともできます。
tasklist /v txt > filename.txt
その後、スクリプトを使用してファイルを読み取り、pidを取得できます。
最終的には、スクリプトを使用してプロセスを強制終了します。