0

「war」としてパッケージ化され、.NET にデプロイされた Java Web アプリケーションがありますTomcat。アプリケーションはJersey、REST Web サービスを実装するために使用します。

このアプリケーションは、テキスト (XML) ファイルを更新することがあります。Tomcatアプリケーションがまだこのファイルを更新している間に停止すると、ファイルが破損している可能性があると思います。Tomcatファイルの破損を防ぐために、終了する前にファイルが閉じられるまで待ちたいと思います。今、私はそれをどのように実装するのか疑問に思っています。

それで、私の質問はTomcat、Web アプリケーションが終了するまで待機させる方法です。

4

3 に答える 3

2

ServletContextListenerを見てください。これは、コンテキストの Destroyed メソッドに固有のものです。

サーブレット コンテキストがシャットダウンされようとしているという通知。

  void  contextDestroyed(ServletContextEvent sce)
于 2012-11-19T09:19:20.390 に答える
2

あなたの場合は別のアプローチをとります(これはあなたの質問への回答ではなく、あなたのケースに対する提案かもしれません)。

新しい xml ファイルを一時ファイル (conf.xml.tmp) に書き込むと、元のファイル (conf.xml) は変更されません。

xml の生成が完了したら、新しく生成されたもの (conf.xml.tmp) を元の (conf.xml) の上に移動します。

(バックアップ目的でオリジナルのコピーを作成することもできます)。

このようにして、xml 生成の処理中に tomcat が停止した場合でも、常に xml が機能します。

ここで重要なのは、同じディスク内のファイルの移動は何らかの形で「アトミック」な操作であり、実行されるかどうかはわかりませんが、途中で実行されるわけではありません。

それが役に立てば幸い

于 2012-11-19T09:41:02.820 に答える
1

これを処理するために、シャットダウン スクリプトを変更できます。ファイルが一貫した状態にあることを確認してから、shutdown を呼び出します。

ファイルの書き込みが処理中であるかどうかを確認し、スクリプトをたとえば 5 分間スリープさせてから、shutdown.sh/shutdown.bat スクリプトを呼び出すことができます。

これとは別に、Java レベルで行うこともできます。しかし、私はそれを外部から制御することを好みます。このようにして、コア アプリケーションから独立して変更できます。

于 2012-11-19T09:33:06.987 に答える