web-dev-qa-db-ja.com

本番用の外部コンテナー内のSpring Boot組み込みコンテナーまたはwarファイル

私は両方の場合に完全にスプリングブートを構成できます。ここでの質問は、どちらがより堅牢で、より推奨されるかです。これは、スプリングブートのドキュメントで、運用環境に展開するための推奨される方法が見つからなかったためです。 、埋め込みコンテナの使用に関する私の懸念は次のとおりです。

  1. WindowsまたはLinuxサービスとして設定する場合、jarファイルは最適なオプションですか?
  2. Jarファイルを使用すると、サーバーを再起動するアクセス権がなくなります。
  3. おそらく将来的には、同じコンテナでさらに多くのアプリケーションが必要になるでしょう。
  4. マシンを再起動した場合、もう一度Java -jarを実行する必要があります。

一般的な質問は、jarファイルを使用して、それをJava -jar jarname.jarとして本番環境で実行するか、パッケージを変更して、提供されているようにTomcatをwarに設定し、生成されたwarを空のTomcat。

あなたが私を助けてくれることを願っています。

---編集---

多くの場合、答えは異なりますが、これは通常のWebアプリケーションまたはREST Webサービスの場合です。

jarパッケージは完全に本番環境に適しており、warにフォールバックする必要があります本当に必要な場合のみ-これは、展開環境を制御できない場合によくあります(大企業ではよくあることです)。

Spring Bootリファレンスには、Spring BootベースのアプリケーションをUnix/Linux/Windowsサービスとして設定することに関する章があります Spring Bootアプリケーションのインストール

あなたの懸念について:

おそらく将来的には、同じコンテナでさらに多くのアプリケーションが必要になるでしょう。

埋め込みコンテナーを使用する場合、同じマシンでさらに多くのアプリケーションを実行する必要がある場合は、2つのアプリケーションを個別に起動し、それぞれを異なるポートで実行すると、2つのコンテナーが実行されることになります。

18

約1か月前に、あなたのような質問がありました。私の結論を共有しましょう:

1)JAR:

  • 異なるポート(linuxではJava -jar ...> app_logs.log&)を使用して、すべてのアプリケーションを個別に実行し、ルーティングすることができます(例:nginx)。なお、再起動しても問題ありません。カスタムbashスクリプトを書くことができます(このようにps aux | grep appnameとPIDでkill)
  • しかし、製品版アプリの構成にはいくつかの問題があります。プロパティファイルはjarにアーカイブされます。

2)戦争

  • コンテナーにデプロイして実行するだけです。サーバーで簡単に管理できます。アプリを再構成する場合は、コンテナー内のアーカイブされていないフォルダーからプロパティファイルを開き、必要に応じて変更し、コンテナーを再起動します。したがって、管理と構成が簡単になります。
  • ただし、このサーバーで別のポートを使用して別のアプリを実行する場合は、コンテナーの別のコピーをインストールして構成する必要があります。

したがって、私の実務では、jarよりもwarアプリを使用して管理および再構成する方が簡単です。

6

サーバーのことはよくわかりませんが、私のおすすめは

  • Monolithicアプリケーションを使用している場合は、外部Tomcatでwarを使用することをお勧めします。

  • Micro Serviceアプリケーションに使用している場合は、異なるポートの組み込みTomcatを使用します。また、各マイクロサービスアプリケーションは互いに独立しています。

1
Mani Kasi

本番環境で「war」ファイルを使用するもう1つの理由。 SpringbootはJettyがスローしたエラーをマスクしましたが、JettyにデプロイされたWARはそれを正しくキャッチしました(以下の問題はまだレビュー中です)

https://github.com/spring-projects/spring-boot/issues/8917#issuecomment-294673487

0
nondescript
  1. Windowsサービスについてはあまり知りませんが、Linuxでは、jarの実行をRC-Scriptsに追加できます(したがって、アプリケーションを特定の実行レベルで開始できます)。スプリングブートアプリの場合は、jarにシンボリックリンクを作成するだけで、他のサービスと同様に開始/停止などを行うことができます。 サービスとしてのスプリングブートアプリケーション

  2. マシンまたはJVMを再起動しますか?シャットダウンメカニズムはSpring Bootに組み込まれており、それをアクティブ化するだけです(そして、誰もそれを実行できないようにセキュリティメカニズムを有効にする必要があります)。次を参照してください: Spring Bootアプリケーションをシャットダウンする方法正しい方法ですか?

  3. Spring-Bootはマイクロサービスを有効にする-したがって、アイデアは、各webapp/microserviceに対して1つの組み込みwebapp-containerを持つことです。これにより、ダウンしているサービスが1つだけの場合にすべてのサービスが失われるリスクが軽減されます。

  4. はい。再起動するたびにcatalina.sh|bat startを実行する必要があります。または、適切な起動スクリプトを追加します(1を参照)。

昔ながらのやり方でやってみたいと思います。 「趣味の問題」の答えにもかかわらず、プロジャーの1つの引数があります。唯一の依存関係はJVMです!残り(web-app-container、db-drivers、その他のライブラリ)はすべて、提供するパッケージの一部です。そして、あなたが次のリリースのためにコンテナを変更することに決めたならば、そうするでしょう。

0
Andy