暇な日々にスパイスを

学んだ技術の備忘録

Spring Boot 20 実行時のコンソール廃止

Spring Bootで作成したアプリケーション(jar)をWindowsで実行時にはコンソールに表示していました。
ログも流れて確認しやすいですし、終了時はコンソールを閉じれば良いため便利でした。

しかし、コンソールを閉じるとアプリケーションも強制終了してしまいます。 複数人が利用するサーバの場合は問題が発生する可能性があります。

そこで、コンソール表示を廃止するようにしました。

対応は2点です。

  1. 実行時にコンソールを表示しない
  2. 停止時にPIDを取得し、Killする

実行時にコンソールを表示しない

startコマンドとjavawコマンドで実行します。

start javaw -Xmx512M -Xms512M -jar -Dfile.encoding=utf-8 Spring_Boot_Application.jar --spring.profiles.active=production

これでコンソールが表示されなくなります。

停止時にPIDを取得し、Killする

Windowsのタスクマネージャで確認するとわかりますが、プロセス名がjavaw.exeとなっています。
複数起動している場合、対象がどれかわからなくなってしまいます。

そこで、jpsコマンドを利用します。
jpsコマンドはJava VMの情報(PID)を表示します。
コマンド自体は、Server JREに含まれています。

jpsコマンドをそのまま叩いた場合、jarと表示されます。
またしても複数起動している場合、対象がどれかわからないため、-lオプションで実行時引数を表示させます。

jarコマンドに渡したjarファイル名とPIDが表示されるため、それを取得しtaskkillします。
1行にまとめると以下のようになります。

for /f "tokens=1" %%i in ('jps -l ^| find "Spring_Boot_Application.jar"') do taskkill /pid %%i /f

これで、コンソールを停止され、アプリケーションが停止することがなくなりました。