質問: ### 開発環境 * Spring Boot 1.5.7 * Windows Server 2012 * Java8 ### 背景 * 今まで私は、Terasoluna(strutsベース)でWebアプリを作成してきました。リリースする際は、Tomcatにwarファイルをデプロイします。 * 環境ごとの設定はGitのブランチで管理していました(開発機用のブランチ、本番環境用のブランチなどを用意した)。 * 今回初めて、Spring Bootを使用します。 ### 質問 warのデプロイと比較して、実行jarを使うデメリットは、何かありますか? たとえば、実行jarの方が遅いとかです。 今私は、リリース方法を「実行jar」か、今まで通りの「warのデプロイ」にするかで、悩んでいます。 私は、実行jarのメリットを、以下のように認識しています。 * ポータビリティの高さ。実行環境に依存するようなプロパティを実行時に指定することが可能であるため。 環境ごとの設定は、今まで通りの「warデプロイ方式」でも実現できたので、そこまでメリットには感じていません。 「実行jar」に大きなデメリットがあれば、「warデプロイ方式」を採用しようと考えています。
回答: Jarで使用しています。ポータビリティの高さは大きなメリットだと考えます。 以下、Tomcatでのメリットについて、Jarでも良いとの考えについて「⇒」以降に書いています。 * TomcatでWARをまとめるとポートが一つで済む。 ⇒ポートが枯渇するほどの数のアプリケーションを一つのサーバで動かさない。 * TomcatでWARをまとめるとJVMの起動が一つで済みメモリが節約される。 ⇒JARで個別に起動したほうがWebアプリケーションごとに必要なメモリがそれぞれ確保できた方が良い。 * Tomcatで実行したほうがサービス化しやすい。 ⇒Spring Boot 1.3からFully Executable Jarに対応してサービス化しやすくなっている。 * Tomcat Webアプリケーションマネージャで状態を管理できる ⇒Spring Boot Actuatorでも状態を管理できる。