2011-02-01 11 views
0

さまざまなデプロイメント構成に対して複数の.propertiesファイルを切り替えることが便利です。Javaプロジェクト内の複数の.propertiesファイル

私の初期の傾きは、その単一のプロパティ適切なファイルを決定するために使用され、別のファイル、selector.properties、作成することです:1つの展開に...

properties.file=deploymentConfiguration1.properties

を、あるいは:

properties.file=deploymentConfiguration2.properties

...次の展開に使用します。

私のチームの他の開発者が、前記ApplicationPropertiesクラスがあります。

private static final String PROP_FILE="someFileName.properties";

...これを行うための手段です。しかし、の再構築なしでプロパティファイルを交換したい!あなたのご意見を事前におねがいします。

EDIT:おそらく私は最初はもっとはっきりしていたはずですが、これはAARとしてパッケージ化された一連のWebサービスです。私はそれをWebサーバーにドロップし、TomcatとAxis2に自分のことをさせます。

だから、私はこの文脈ではコマンドラインパラメータの答えのいくつかはうまくいかないと思います。

+0

プロジェクトで、これを行うのに役立つフレームワークまたはツールキットを使用していますか(春など)。 –

+0

私たちはプロジェクトのWebアプリケーション部分でJSFとWeldを使用しています。 –

+0

あなたの問題の解決策を見つけたようです。このソリューションの問題点は何ですか? –

答えて

5

envごとに1つのプロパティファイルが複数あります。

application-dev.properties 
application-test.properties 
application-prod.properties 

システムプロパティとしてenvを使用してアプリケーションを起動します。

java -Denv=test 

関連ファイルからプロパティをロードします。私は、一般的な特性の賛成でこれを阻止したい

String props = "application-" + System.getProperty("env") + ".properties"; 

注意は、ファイルがビルド時に生成され、固定された名前のファイル。

編集:
それはウェブアプリなら、あなたはデプロイメントディスクリプタ(web.xmlファイル)

<env-entry> 
    <env-entry-name>myEnv</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>test</env-entry-value> 
</env-entry> 

にENVの値を設定することができ、その後、あなたのWebアプリケーションに値を取得することができますようにこの;

Context ctx = new InitialContext(); 
Context envCtx = (Context) ctx.lookup("java:comp/env"); 
String env = (String)envCtx.lookup("myEnv"); 
String props = "application-" + env + ".properties"; 
+0

私はこの解決策が好きです。たぶん私はこの質問ではっきりしていたはずですが、これはAARとしてパッケージ化された一連のWebサービスです。私はそれをTomcatサーバーにドロップします。私がプロジェクトを直接実行していない場合にも、同様の方法で提案することができますか? –

2

設定ファイルを指摘する引数を追加してください!

+2

私は同意します。コマンドライン引数またはコマンドラインシステムプロパティは、これを達成するための最良の方法です。 –

0

"プロパティマネージャー"プロパティーファイルを使用するアプローチは良いと思います。 マスタープロパティファイルは、jvm引数を使用してvmにパラメータとして渡すことができます ただし、このプロセスの1つの欠点は、マスタープロパティファイルがある期間にわたって管理されなくなることです。たとえば、もはや意味をなさない古いプロパティファイル参照をいくつか残してしまうことがあります。

関連する問題