こんにちは。フリューのジョンです。

Spring Boot良いですよね。設定が楽ですね。弊社ではマイクロサービスを勧めていく上でSpring Bootを使うことが増えてきました。

ただ、Spring Bootのアプリケーションを再起動する際にkillをしても、たまにプロセスが死なない時があり、再起動に失敗するということがありました。

何かいい方法はないのかなぁと見ていたところ以下が見つかりました。
https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
この方法を入れると今までは

という感じで起動していましたが

で起動するようになります。startの他には以下があります

  • stop
  • force-stop
  • restart
  • force-reload
  • status
  • run

この方法で起動するには前準備が必要です。

 

前準備

mavenプロジェクトであればpom.xmlに以下pluginを追加します

次にconfファイルを作成します。ファイル名はjarの名前と同じにしておきます。${application}.conf(confファイルは環境変数に設定してある場合は無くても良いです

次にpackagingしたjarファイルをサーバにデプロイし、権限を変えておきます。

配置したjarと同じ場所に先ほど作成したconfファイルを配置し、その後以下でリンクを作成します。

これで終わりです。

 

再起動方法

jarファイルをデプロイした後に、以下コマンドで再起動をしていくことになると思います。

 

なぜ動くのか

mavenのpluginを入れることでjarファイルの先頭にスクリプトが挿入されます。
このスクリプトがserviceからの起動に対して動くことになります。

参考: Spring Boot の Fully Executable Jar はなぜ動くのか

 

application.ymlに書いた日本語文字列が文字化けする

起動はできたのですが、application.ymlに書いた文字列が文字化けしてしまいました。

そこで先ほど記載したconfのJAVA_OPTSにfile.encodingを追加します。

 

まとめ

以上の設定をすることで今までのところ再起動失敗というのはなくなりました。

素敵なマイクロサービス運用、Spring Bootライフを!!

弊社では一緒にサービスを作ってくれるSpringエンジニアを募集しています!!

詳しくはこちら