VIDTAKER.COM

Q&A

それは悪い習慣のjarファイル内のプロパティを/ configuarationのファイルが含まれですか?


例:

MyAppはプロパティが(server.properties)が(例えば、サーバー名)アプリのデータを設定方法について説明しますファイルを含むWebアプリケーションです。開発段階では、server.propertiesは、独自のIDEのプロジェクトフォルダ内の()は論理的スポットに位置しています。

今ではMyAppを展開する時間です。 IDEがクラスを開くことは非常に簡単にjarファイルになりますと同様にサポートの設定ファイルします。今では、適切なWebコンテナにJarをドロップ先我々は....行く

1週間後に...サーバーが設定データがMyAppは変更する必要を使用します。どちらがより理にかなって?

Åの変更server.propertiesに戻るIDEの土地でファイルを完全に新しいjarファイルを生成します。再配備。 (これは単純な構成の変更のためのアプリケーションをバウンスを意味します)。

Bの亀裂は、すでに配備Jarを開き、server.propertiesを変更ファイル? server.propertiesがキャッシュされている場合(MyAppのでリフレッシュ関数を呼び出す必要があります...しかし、完全なアプリケーションのバウンスを必要としないでください。また、同様に、今後展開がserver.propertiesを元に戻すしないソースserver.propertiesを変更してくださいする必要があります古いサーバー名)に。

Cのserver.properties最初の場所でのjarファイルの外部にしてください。非常にBのプロセスには、データをjarファイル(外部設定維持のマイナーの違いと同様)が開発と生産の展開と異なるパスを紹介

Dがその他:

ありがとう!



9 Replies

1)

私はDに行くと思います

つまり、プロパティをjarファイルに組み込まれて読み込むが失敗した場合のプロパティを読み込むためにしてください。jarファイルの外してから、ファイルを。

これは、それぞれの(また、展開の複雑さを軽減ビルド"準備ができて"設定を押し出すことができます1つのファイルで)場合も、オーバーライドする構成と合理的な可能にした。


2)

場合によります。プロパティは、ファイルがある場合、アプリケーションまたはライブラリのユーザーが、より外に配置する必要が変更されることを意図されたデータを含んでいます。

それは静的であり、プロパティを作成したデータが含まれる場合だけ場合、またはファイルがローカライズされた文字列ですソースコード内の値を符号化しないようにします、私は瓶の中に残してね。少なくともプロパティは、ファイルのために値を変更する人々を誘う。)


3)

、は、J2EEでは、J2EE環境(直接ファイルアクセス)、外部からファイルにアクセスできるようにしない保証されて思い出してください。

あなたはデータソースのデータ、またはプロパティを含むを指すようにJNDIを使用する必要がありますデプロイメント成果物のファイルです。

WebSphereは、たとえば、デフォルトではファイルへの直接アクセスを許可しない。


4)

私は、同様の質問を求めてきました。我々はまだそれをすべて把握していない。しかし、我々は、URLリソースに探しています。プロパティファイルは、直接SVNから読み込まれるとき。いいえ、必要なものをプロパティファイル以外の更新します。


5)

よくそれが条件です、コードが生産するためのテストからする必要がありますUnchangedの移行 。これは、あなたが構成、ファイルを埋め込み編集できませんを意味します。また、あなたが配備設定を変更する - が頻繁に非常に面倒ですが必要な状況になることがあります。したがって、私たちは瓶の外configuraitonままにします。

ジヨンのアプリケーションのJNDIまたはパスのプロパティファイルを検討します。

私は構成が隣人のWebアプリケーションから単純に分離するために2つの取り出すかのWebアプリケーションがあります。それははるかに簡単であることが判明。


6)

D.

jarファイルの負荷特性。次に、デフォルトとしてjarファイル-エドプロパティを使用して新しいプロパティを作成します。 jarファイルの外から次に負荷。これにより、プロパティを選択しますカスタマイズできます。


7)

私はWebアプリケーションで(WAR)を、プロパティファイルを使用しますが、デフォルトの値と、多かれ少なかれ不変だもの主に(以降、WebアプリケーションはWARファイルを更新すべきではない場合でも、彼らができます)。

何を話しているようなものについては、しかし、私は、JNDIを使用します。あなたのweb.xmlファイル内のリソースのプロパティを定義することができます。そうすれば、最悪の場合、あなたは、web.xmlではなく、アプリケーションそのものを更新します。

いくつかのサーバーでは全然WARを触れることなく、これらのリソースの値をオーバーライドする方法があります。たとえば、Tomcatのです。

私は普通のテストの1つのWARを行うと、正確に、これはTomcatのコンテキストXMLファイルを使用して、されたのQ / Aと生産をオーバーライド環境に配慮したリソース。私はこのまたは複数のWARファイルをビルドするスターウォーズを変更するには、私がテストしてアプリからほぼ生産だアプリと同じです有するより多くのより良いご検討ください。


8)

私の答えは、あなたがバージョン管理にconfigs必要と思うかどうかに依存すると思います。 (彼らは生産configsや回帰テストのためconfigsかもしれない...)

  • あなたは、バージョン管理を必要としない場合は、Dオプションは、プロパティファイルをオーバーライドする外部プロパティファイルで良いものです。あなたが本当にはバージョン管理:-)を使用しているはずだ気にする場合のオプションBとCがより多くの原料アップにオープンですが、
  • あなたは、バージョン管理が必要な場合、オプションを使用するが、場合は、複数の展開の場合は、また、/バージョン管理にそれぞれの展開のためのconfigsを必要とすることがあります可能性があるより多くの制御を提供します。例では、テストおよび生産プラットフォーム別の展開です。

ここではどのように我々は、これはMavenのモジュールとMavenのWARファイルを使用して行うだ""オーバーレイ。

  1. 我々は、Javaコードコンポーネントの複数のモジュールがあります。これらは、JARファイルのモジュールです。
  2. 我々は、静的なコンテンツ、JSPやコア構成データ(春の配線は、デフォルトのプロパティの"ベースWebアプリケーション"モジュールを)があります。建物の結果は、WAR、上記の+を全てのJARファイルが含まれているので、これはWARモジュールです。
  3. 各個別の"サイトの設定"、配線のファイルやコンテンツをプロパティのサイト固有のオーバーライドを含むWARファイルのモジュールです。オーバーライドは、"オーバーレイ"のメカニズム、その結果、新しいWARにMavenのWARファイルを使用して、"基本"WARファイルをオーバーライドから組み立てられて記述されます。

すべては、こののバージョン管理にチェックインされ、あなたは、Mavenは、WARデプロイメントの構成を変更するビルドを実行する必要があります。




9)

私は、J2EEアプリケーションをSpringを使用して開発。私は、時間が実行している周辺の同じ問題がかなり長いし、解決策を見つけた私の問題は、展開のデータベースプロパティを指定された私は戦争のファイルのプロパティファイルの外。解決策は、私はこのPropertyPlaceholderConfigurerを使用して、場所のプロパティを指定するこのようにあなたのシステムの場所を見つけることですし、発見

これは非常に単純であり、それがうまく働いて!