2011-03-31 9 views
0

これが重複している場合は謝罪します。私は、変更する必要のある多くの.properties設定ファイルに加えて、環境に応じて変更する必要のあるさまざまなプロパティを持つwebappを構築しています。今私はグローバルな列挙型(、STAGING、およびPRODUCTION)がアプリケーションで使用されている文字列定数を決定するために使用され、その後、構成ファイルでデータベースサーバー間を切り替えるためのコメントを使用します。これを行うにはもっと良い方法が必要です...これらの設定を調整するには、1つのファイルに1つの変更を加えることが理想的です(大きなブロックコメントはうまくいくでしょう...)。私はthis postを見ましたが、答えは私が本当に好きなJNDIを利用することですが、起動したサーブレットや起動時に初期化されたbeanから呼び出す必要があるように見えます。 JDBC構成ファイル複数の展開のJava Webアプリケーション構成ファイルを統合する方針

誰もがこれに対処するための戦略を持っていますか?

ありがとうございます!

答えて

1

この戦略があなたの状況に当てはまるかどうかはわかりませんが、過去に私たちのビルドツール(その場合はant)を使用してプロファイルに応じて異なるwarファイルを構築しました。したがって、ソースツリーに複数のlog4j構成ファイルを作成し、ビルドに使用されたプロファイルに応じて最終ビルドから不要なものを削除します。

トレーサビリティは若干難しくなります(ビルドに使用されたものを特定するのが難しい場合があります)が、ビルドスクリプトで行われるため、コードの観点からは非常にクリーンなソリューションです。

+0

私は間違いなく、このことについて考えたいと私はそれは素敵な解決策だと思います。私の唯一の問題は、今はビルドツールを使用していない、ちょうどEclipse(悪い、私が知っている)です。 –

0

すべてのデフォルト設定値を1つのXMLファイルに保存します。展開時には、環境固有の値を持つXMLパッチ(RFC-5261)を適用します。

http://tools.ietf.org/html/rfc5261 http://xmlpatch.sourceforge.net/

0

私はあなたのプロパティファイルが95%名で構成されていると仮定するつもりです=すべてのデプロイメント環境間で同一の値ペアと1つのデプロイメント環境から別のデプロイメント環境に変更される、の5%の名前=値のペア。

この仮定が正しい場合は、次のような疑似コードを試すことができます。

void generateRuntimeConfigFiles(int deploymentMode) 
{ 
    String[] searchAndReplacePairs; 

    if (deploymentMode == Constants.PRODUCTION) { 
     searchAndReplacePairs = ... 
    } else if (deploymentMode == Constants.STAGING) { 
     searchAndReplacePairs = ... 
    } else { // Constants.DEVELOPMENT 
     searchAndReplacePairs = ... 
    } 
    String[] filePairs = new String[] { 
     "log4j-template.properties", "log4j.properties", 
     "jdbc-template.properties", "jdbc.properties", 
     "foo-template.xml",   "foo.xml", 
     ... 
    }; 
    for (int i = 0; i < filePairs.length; i += 2) { 
     String inFile = filePairs[i + 0]; 
     String ouFile = filePairs[i + 1]; 
     searchAndReplaceInFile(inFile, outFile, 
           searchAndReplacePairs); 
    } 
} 

あなたのアプリケーションは、プロパティ/ XMLファイルに依存しているかもしれない何か他のものを初期化する前にgenerateRuntimeConfigFiles()を呼び出します。

ここで対処しなければならない問題は、searchAndReplacePairsのさまざまな設定を保存して取得する方法だけです。おそらく、あなたはproduction.propertiesstaging.propertiesdevelopment.propertiesのような名前のファイルからそれらを得ることができました。

上記のアプローチが魅力的な場合は、searchAndReplaceInFile()というソースコードをメールで送信して、ホイールを再作成する必要がありません。私の電子メールアドレスは、私のStackoverflowプロファイルの "info"ボックスから見つけることができます。

0

私はApache Commons Configurationを使用することをお勧めします。それはあなたの環境に応じて異なる構成を処理するためのすべての配管を提供します。

http://commons.apache.org/configuration

関連する問題