質問

Java ライブラリ内のすべてのハードコーディングされた値を削除する過程にあり、実行時構成を処理するのに (ゼロまたはゼロに近い構成の点で) どのフレームワークが最適であるか疑問に思っていました。XML ベースの構成ファイルを使用することをお勧めしますが、必須ではありません。

フレームワークの実務経験がある場合にのみ返信してください。私が探しているのは例ではなく、経験です...

役に立ちましたか?

解決

ハードコードされた値が単純なキーと値のペアである場合は、以下を確認する必要があります。 java.util.Properties. 。これは XML よりもはるかにシンプルで使いやすく、実装は気が遠くなるほど簡単です。

Java を使用していて、ディスクに保存またはディスクから取得しているデータがキーと値のペアとしてモデル化されている場合 (あなたのケースではそう思われます)、これより良い解決策は本当に想像できません。

私は、より大きなプロジェクト内の小さなパッケージの単純な構成や、プロジェクト全体のよりグローバルな構成としてプロパティ ファイルを使用しましたが、それで問題が発生したことはありません。

もちろん、これにはサードパーティのライブラリを利用する必要がないという大きな利点があります。

他のヒント

Apache Commons の構成 よく働く。プロパティ、XML、JNDI などを含む幅広い形式でバックエンドに構成を保存することがサポートされています。使いやすく、拡張も簡単です。最大限の柔軟性を得るには、 工場 設定を取得して使用するだけです 設定インターフェース その後。

Commons Configuration が通常のプロパティ ファイルと異なる 2 つの特徴は、共通型 (int、float、String 配列) への自動変換をサポートしていることと、プロパティ置換をサポートしていることです。

server.host=myHost
server.url=http://${server.host}/somePath

以下にさまざまなオプションがあります。

読んでみるといいかもしれません JFig および JConfig を使用した Commons 構成の比較 そして JFig を使用したアプリケーションの構成 さまざまなユーザーからのフィードバックをご覧ください。

個人的には、jConfig を使用したことがありますが、良い経験でした。

コモンズの構成

うちはこれを使ってます。プロパティ ファイルだけを扱う方がはるかに簡単ですが、より複雑なデータ コモンズ構成を表す必要がある場合は、これを実行してプロパティ ファイルも読み取ることができます。

複雑なことをしていない場合は、properites ファイルを使用することをお勧めします。

高度なこと (およびタイプセーフ) を実行したい場合は、これを参照するとよいでしょう。 http://www.ibm.com/developerworks/java/library/j-configint/index.html

インテリジェントパラメータ活用ツール (入力、 ページ) を許可します ほぼすべての (ハードコードされた) 決定をパラメーターとして XML ベースの構成ファイルに外部化します。 これは、汎用性と懸念事項の分離に関して既存の構成ツールに認識されている欠陥への対応として、2012 年の初めに開始されました。

InPUT は、おそらくほとんどのユースケースが必要とするよりも強力です。 プログラミング言語に依存しない定式化 実験データ (入力 - 出力) の定義などの機能を備えた 複雑な記述子からクラスへのマッピング, 、または事前定義された値の範囲に基づいてランダム化された構成の生成と検証(テストと研究用、例:モンテカルロシミュレーション)。あなたはできる サブパラメータを使用したパラメータの定義、パラメータ値の相対的な制限 (数値パラメータ a > パラメータ b) 等。

まだベータ版ですが、かなり安定しているので、研究や研究に使用しています。 実験の構成と文書化、および教育目的. 。他の言語 (パイプ内の C++ アダプター) で利用できるようになると、他の研究者や実践者は、(コード マッピングの概念を使用して) C++ で同じアルゴリズムの実装を実行する記述子を再利用できます。そうすれば、 実験結果を検証できる/プログラムをより簡単に移行できる. 。ドキュメントはまだ作業中ですが、いくつかの 例が利用可能です ページ上で。入力は オープンソース ソフトウェア。

興味のある方は、 概念的な研究論文.

私がよく使うのは java.util.Properties (または他の言語やフレームワークの同様のクラス) アプリケーション固有の構成クラスにラップされる ほとんどの場合、私はこれの代替案やバリエーションに非常に興味があります。特に、グラフィカルな構成ダイアログや構成データの複数のビューが関係する場合、作業が少し難しくなる可能性があるためです。

残念ながら、私は Java 用の特定のライブラリを使用した経験がありません (自分で作成したライブラリを除く) が、何かご指摘があれば幸いです。

アップデート

わかりました。それは完全に真実ではありませんでした。3 つ目は、 Spring Java 構成プロジェクト.

書きました これについては数週間前に検討し、XML が最も広く使用されている表記法の 1 つであるという結論に達しました。

最高ですか?私は JSON が大好きですが、ツールがまだ XML に達していないので、様子を見る必要があると思います。

あなたが試すことができます ヤムルビーンズ. 。このようにして、構成データを保持したいクラスを作成すると、それらのクラスを YAML との間で自動的に読み書きできるようになります。

YAML は人間が判読できるデータ形式です。java.util.Properties よりも表現力が豊かです。リスト、マップ、アンカー、型付きデータなどを含めることができます。

こちらのURLをご覧ください。 http://issues.apache.org/jira/browse/CONFIGURATION-394

私たちが探している設定フレームワークは、Apache Commons Configuration の上にあるもので、同時実行の問題、JMX の問題、およびほとんどのストア (例: .properties ファイル、.xml ファイル、または PreferencesAPI) をサポートする必要があります。

WebLogic チームが「管理コンソール」で提供しているものは興味深いもので、これを通じて構成のトランザクション (アトミック) 更新を実行して、登録されたリスナーに通知できるようになります。

Apache 担当者は、このプロジェクトは Commons Configuration の範囲外であると主張しています。

簡単な設定フレームワークを添付しましたので、ご覧ください。

ほんの少しだけ投稿しましたが、 コード IoC の代替として Spring の ClassPathResource を使用することについて。ClassPathResource を使用すると、プロパティ ファイルをクラスパス上の任意の場所に配置できます (たとえば、すべてを 1 か所にまとめたり、構成するコードのピアとして配置したりできます)。この例では java.util.Properties を使用しているだけなので、プレーンテキストの「name=value」スタイルまたはその XML 形式を使用できます。

プロパティ ファイルは非常に単純ですが、より機能的なものが必要な場合は、構成ファイルの一部を Java クラスとしてフォーマットできます。これらは別のパッケージ/モジュールに配置でき、BeanShell などのライブラリを使用して実行時にプリコンパイルまたはロードできます。

注記:最も単純なケース (プリコンパイル済み) では、追加のライブラリは必要ありません。

java.util.Properties の使用に関する提案については、jdk 1.5 以降では、Preferences API (java.util.prefs) が、Properties API を使用する代わりに推奨されるようです。

理由:スケーラビリティの向上、バックエンドの中立性など。

新たに発表されたものをご覧いただけます tools4j-config その使命は、実行時の構成を簡単に処理できるようにすることです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top