2009-11-24 15 views
11

Tomcat Webアプリケーションに永続的なファイルを保存する場所はどこですか?/tomcatで永続データを保存する場所/方法は?

  • javax.servlet.context.tempdirは現実的ではありません、それはアプリを再デプロイする際に/
  • 削除消去されます例えば、絶対パスを使用したくありませんサーブレットのinitは、質問のタイトルに答えるオプション
+2

私はあなたがデータベースを使いたくないのですか? – Suppressingfire

+2

あなたはデータベースがオプションではない理由を説明しなければなりません、彼らは基本的で共通しているので、他の何かが起こっていることを確かに禁止します。たぶん、私たちが知るべきである特別に制約された環境にいます。 – Karl

+2

これはオプションではないためです。私は、これらの大きなファイルを、データベースについて何も知らないレガシーな外部ツールでどのように処理する必要があるのか​​を説明し、それらをすぐに引き出すためにデータベースに表示することは、現時点では役に立たない。それだけではありませんが、私の言葉を受け入れてください:-) - – nos

答えて

9

私たちのチームはこれを多く行います。私たちが従う一般的なルールは、Webアプリの外とTomcatの外です。

私たちのsysadminは、tomcatユーザーがrw権限を持つディレクトリをサーバー上に設定します(例:/var/tomcat/persist)。このディレクトリ構造の下にTomcatがファイルの保存、アプリケーション固有のinitファイルの読み込みなどのディレクトリ構造を構築しています。

サーブレットのinit-paramsで絶対パスを使いたくない場合は、 Tomcat起動時にシステムプロパティを設定する。それについての良いことは、Tomcatの下で実行されているすべてのアプリケーションがそのアプリケーションにアクセスできることです。これについての悪い点は、Tomcatの下で実行されているすべてのアプリケーションがそのアプリケーションにアクセスできることです。 base.persist.dirという名前のプロパティを設定し、その下にある各アプリケーションのサブディレクトリを構築することができます。我々はのsetenv.shスクリプトのシステムプロパティを、bin/ディレクトリのCATALINA_OPTS環境変数に設定します。

5

データベース内のファイルを保存

  • されていないパラメータ、何を、DataSourceとJDNIをデータベースを使用してはどうですか? Webのみのコンテキストであっても、同時実行性、スレッド化、セキュリティ、クラスタリング、移植性の問題から、java.ioを使用してファイルに書き込むことはお勧めできません。これらの問題のいくつかは "回避策"になる可能性がありますが、これは実際にはベストプラクティスではありません。標準的なアプローチはデータベースを使用することです。私はこのオプションを再考することを提案し、HSQLBDやJavaDBのような "ファイルベースの"軽量データベースをミックスに投げかけます。

    (EDIT:不明な理由のために、データベースはオプションではありません絶対パスを渡すためにJNDIまたはコンテキストパラメータまたはinitパラメータを使用して - レス悪化したオプションの私見です - あまりにも除外されている相対について。パスの場合は、user.homeまたはuser.dirを参照してください - またはコマンドラインで渡すことができる他のシステムプロパティ。私はそれが好きではありません、私はやっていないでしょう、結局のところあなたの選択です。)

  • +0

    Claridfied。データベースはオプションではありません。 – nos

    0

    私は一般的に永続的なデータを保存し、それをDataSource経由で公開するためにデータベースを使用することを提案します。

    これをしたくない場合は、「user.home」システムプロパティ(これはいくつかの状況で使用されています)を使用することを検討することができます。しかし、あなた自身で設定しない限り、あなたのサーブレットがアクセス権を持って実行されるという保証はありません。

    4

    Tomcatを実行しているユーザーのホームディレクトリの下にあるwebappディレクトリにファイルを保存すると便利です。これはTomcatの外にあります。これは、再デプロイメントに耐えられることを意味し、通常は書き込み可能なディレクトリです(ユーザーのホームディレクトリの下に作成されるため)。 しかし、システムのプロパティを介してそのようなディレクトリの場所を上書きすることを許可することは、常に良い考えです。

    1

    通常、これはデータベースに送られます。知られている

    • ファイルシステムのパス:${user.home}/.myapp OPはデータベースを使用していないことを主張するのでしかし、私は別のアプローチを試してみました。アプリケーションは、例えば、検索インデックスは、データベース内のデータに基づいて再計算できます。あなたのユースケースでユーザーの家を使用するのは大丈夫でしょうか。
    • 構成可能なファイルシステムのパスをデータベースなどの構成リポジトリに格納するか、おそらくJava Preferences(サーブレット初期化パラメータを使用したくない場合)。 Atlassian JIRAなどの商用アプリケーションでは、問題の添付ファイルを保存する設定可能な(しかし絶対的な)ファイルシステムパスを使用します。彼らがより良い方法を知らないなら、私は誰がわからないのですか?
    +0

    tomcat7(少なくともUbuntu上で)に$ {user.home}に書き込むと、アクセス権のためにIOExceptionが発生します。 – Jonathan

    関連する問題