web-dev-qa-db-ja.com

サービス全体を再起動せずにTomcat webappを更新するにはどうすればよいですか?

Tomcatが初めてです。約5つのアプリを実行する開発マシンがあります。それは開発者ですが、テスト中にクライアントによってかなり頻繁に使用されます。

したがって、1つのクラスファイルに1つの小さな変更を加える必要があると言います。今、Tomcatをシャットダウン(他の4つのアプリに影響)、WARファイル(およびWebアプリディレクトリ)を削除し、新しいWARファイルを再デプロイして、Tomcatを再起動する必要があります。

もちろん、これはすべてのアプリのすべてのログインセッションを破壊するため、数人を混乱させます。

これを行うためのより良い方法はありますか?つまり、devマシン上のすべてではなく、変更されたCLASSのみをリロードする方法はありますか?

ありがとう。

89
cbmeeks

TomcatのManagerアプリケーション を使用しようとしましたか? Tomcatをシャットダウンすることなく、warファイルを展開/展開できます。

Managerアプリケーションを使用したくない場合は、webappsディレクトリからwarファイルを削除することもできます。Tomcatは短時間後にアプリケーションをアンデプロイします。その後、warファイルをディレクトリにコピーして戻すと、Tomcatはwarファイルをデプロイします。

TomcatをWindowsで実行している場合、さまざまなファイルをロックしないように configure コンテキストが必要になる場合があります。

ダウンタイムが絶対にない場合は、 Tomcat 7のParallel deployments 同じコンテキストパスを持つWebアプリケーションの複数のバージョンを同時にデプロイできます。リクエストをコンテキストバージョンに一致させるために使用されるルールは次のとおりです。

  • 要求にセッション情報が存在しない場合は、最新バージョンを使用してください。
  • 要求にセッション情報が存在する場合、各バージョンのセッションマネージャーで一致するセッションを確認し、見つかった場合はそのバージョンを使用します。
  • リクエストにセッション情報が存在するが、一致するセッションが見つからない場合は、最新バージョンを使用してください。
55
Steve K

複数の簡単な方法があります。

  1. 任意のwebappのweb.xmlをタッチするだけです。

    touch /usr/share/Tomcat/webapps/<WEBAPP-NAME>/WEB-INF/web.xml
    

また、warファイル全体をビルドして再度デプロイするのではなく、WEB-INF/libの特定のjarファイルを更新してからweb.xmlをタッチすることもできます。

  1. Webapps/YOUR_WEB_APPディレクトリを削除すると、Tomcatは5秒以内にwarのデプロイを開始します(warファイルがwebappsフォルダーにまだ存在すると仮定します)。

  2. 一般に、warファイルを新しいバージョンで上書きすると、Tomcatによって自動的に再デプロイされます。そうでない場合は、上記で説明したようにweb.xmlに触れることができます。

  3. コピー 既に展開された「ディレクトリ」からwebappsフォルダーに

26
Chirag Katudia

Apache Tomcatのconfディレクトリには、context.xmlファイルがあります。その編集タグでは、<Context reloadable = "true">として。これで問題は解決し、サーバーを再起動する必要はありません

20
skal