問題タブ [apache-commons-config]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 実行時に新しい PropertiesConfiguration ファイルを提供することは可能ですか?
バックグラウンド:
ユーザーに表示されるメッセージは、言語と会社の部門の両方で異なる必要があるという要件があります。したがって、すぐに使用できるリソース バンドルを使用することはできないため、基本的には、PropertiesConfiguration ファイルを使用して独自のバージョンのリソース バンドルを作成しています。
さらに、再起動を行わずに、本番環境でメッセージを動的に変更できる必要があるという要件があります。
プロパティ ファイルの 3 つの異なる繰り返しを読み込んでいます。
これらのファイルはクラスパスに存在します。このコードは、Portal 内の複数のポートレットで使用されるタグ ライブラリに入れられます。
可能な .properties ファイルを作成し、次の方法でそれぞれをロードしようとします。
ファイルが正常に見つかった場合は、作成された PropertiesConfiguration を再利用できるようにハッシュマップに保存し、キーを見つけようとします。(通常のリソース バンドルとは異なり、キーが見つからない場合は、より一般的なファイルを見つけて、そのファイルにキーが存在するかどうかを確認しようとします。そのため、オーバーライド例外のみを言語/部門固有のプロパティに入れる必要があります。ファイル。)
問題:
最初にチェックされたときにファイルが存在しなかった場合、予想される例外がスローされます。ただし、後でファイルがクラスパスにドロップされ、このコードが再実行された場合でも、例外はスローされます。ポータルを再起動すると明らかに問題は解消されますが、それは私にとっては役に立ちません。言語/会社部門のオーバーライドのために、再起動なしで新しいメッセージをドロップできるようにする必要があります。また、かなりの数の部門があるため、考えられるすべての部門に対して空のファイルを作成することにあまり興味がありません。
これは classLoader の問題であると想定しています。最初はファイルがクラスパスに存在しなかったと判断し、同じファイルをリロードしようとしたときにその結果がキャッシュされます。私はclassLoaderであまりにも派手なことをすることに興味はありません。(そのコードを理解/保守できるのは私だけです。) 特定の環境は WebSphere Portal です。
これを回避する方法はありますか?
java - PropertiesConfigurationを使用すると何が問題になりますか?
ファイルを更新するために、.properties
ApacheCommonsConfigurationのPropertiesConfigurationを使用しています。しかし、私は次のようにコードを使用しています:
このエラーが発生します:
ここで何が問題になっていますか?初めて使っています。
PS:処理に利用できる比較的同等以上のライブラリはあります.properties
か?
java - Apache 共通構成ライブラリ: 破損したプロパティ ファイル
顧客から破損したプロパティ ファイルを受け取りました。ファイルはアプリケーションによって変更され、バージョン番号が更新されます。コードはapache commons 構成を使用します。テストしたところ、ライブラリは常に iso-8859-1 形式でファイルを書き込むようです。
コードは以下に簡略化されています。次のコードが不良ファイルを書き込む可能性は何ですか?
念のため - 不良ファイルは以下のようになります。どのエンコーディングでも似ていません。このファイルは元々、キーと値がすべて英語 (ascii chars) で記述された通常のプロパティ ファイルでした。
F????Co?aR??m??E?3#?? = h\u00BD5j\u00B3\u00E0\u0096\u001D\u0081fe\u00BEo\b\u00A3\u0001\u00FE\u00A4\u00DE\u0000\u00FBi\"\u009C{\u00FC\u00D9\u00E2?c\u00%F6\u00FF B\u00A47\u00195\u001EXv\u0097/\u00D7x\u0099\u000E\u00A2gIX\u0014\u0097]k\u00882\u0003\u0014\u0097\u00BC\u00C3\u00AE\u00B4\u001E\u001E\u001E\u000 \u0016\u009B\"7\u0085'\"\u00DCT*v'\u0092\u0007\u0091A\u00BD\u00ACl6~\u0097\u00C0\u00B1\u00D1\u00EB\u00FF\u00A8\u00F3\u0001'\u00BF\ u0006\u001F\u009C\fk\u009F\u00C2\u00D9L^_\u0004J4\u00AF\u00D8\u00DAW\u00C4\u00CDj\u00E3\u0095\u00D1+\u00CE?\u0004>Z]\u00D7\u009B\u001B\u001 u0095\u00AC\u00F7\u00E7\u009ATF\u0019\f)\u00A3\u00A9\u00DC\u00AD\u00ACtq5\u0085\u008E-\u00A3oH\u0000\u00C2\u0092\u00B5\u00F2\u008F1\u008F1\u0008H7\u0008H u0003!
編集:顧客環境は日本語です。アプリケーションが常にどのように実行されるか
-Dfile.encoding=UTF8
java - Apache Commons-構成の置き換え/競合他社?
最近、Apache Commons-Configurationを使用して、いくつかのローカルXML構成ファイルを管理しようとしました。使いやすさ(空の構成ファイルを読み込めない、CombinedConfigurationではほとんどの操作で基盤となる構成を利用する必要があるなど)とAPI全体の一貫性(イベントを投稿しない操作を保存する、イベントはユニバーサルではない)が大幅に不足しています。
レジストリに書き込むJDKプリファレンス(私は必要ありません)以外に、ファイルベースのプリファレンスを管理するための代替手段はありますか?
別のファイル形式を使用することはできません。
java - Java のマルチテナント/条件付き構成用に存在するライブラリは?
システムのさまざまなユーザーがシステムと対話するように、サーバー側の Java アプリケーションを構成するためのソリューションを見つけようとしています ( Multitenancy )。たとえば、アプリケーションが user1 からのリクエストを処理する場合、アプリケーションがクリンゴン語で応答するようにしますが、他のすべてのユーザーには英語で応答するようにします。(詳細を避けるために、意図的にばかげた例を選びました。重要なことは、アプリが要求ごとに異なる動作をするようにすることです)。
理想的には、一般的な解決策があります (つまり、コードを変更することなく、構成の任意の部分にユーザー固有のオーバーライドを追加できるようにする解決策)。
マルチテナント構成のサポートが組み込まれている Apache Commons Configuration を見てきましたが、私が知る限り、これは基本構成とオーバーライドのセットを組み合わせることによって行われます。これは、次を指定する構成があることを意味します。
そして、user1.properties
上書きファイルを言います:
残念ながら、 baseと overridesで別々のファイルを用意するよりも、何らかの方法でインラインで指定されたオーバーライドを使用して、関連するすべての構成を 1 か所で確認できる方が、サポート チームにとってはるかに簡単です。
Commons Config のマルチテナンシー +基礎となる構成内の条件付き要素を記述するVelocity テンプレートのようなものの組み合わせは、私が目指しているもののようなものだと思います - 私の構成とのやり取りを容易にするための Commons Config と、オーバーライドを非常に表現的に記述するための Velocity 、単一の構成で、例えば:
この種の問題に対して人々はどのような解決策を使用していますか?
spring - Apache Commons Config を使用してライブラリを PropertyPlaceholderConfigurer を使用して Spring プロジェクトと統合する際の問題
JMS 通知を送信するカスタム ライブラリがあります。プロジェクトでいくつかのプロパティを設定するだけでライブラリを使用できるという考え方です。
カスタム ライブラリは Apache Commons Configuration を使用しています。(私がこれに言及する理由は、それが私の問題で役割を果たしているのではないかと思うからです). Commons Config を使用せず、PropertyPlaceholderConfigurer を使用する現在の Spring プロジェクトで使用しようとしています。必要なプロパティを .properties ファイルに書き出しました。
ライブラリを依存関係として pom.xml ファイルに追加しました。私はそれを私のweb.xmlに追加しようとしました
Spring プロジェクトで Bean を作成するときに、ライブラリで定義されている Bean の 1 つを参照しようとしたので、それを使用できました。プロパティ ファイルのプロパティを必要とするライブラリ Bean の 1 つを作成中にエラーが発生しました。
プロジェクト内の他のプロパティ ファイルのいくつかには、ブール値のプロパティがまったく同じ方法で問題なく設定されていることがわかっています。これは、 applicationContext.xmlにプロパティ ファイルをロードする方法です(ログを確認した後、正しくロードされているようです)。
最後に私の some-monitoring.properties ファイル:
だから、ブール値のプロパティで何が起こっているのか、そしてその理由は何なのかと思っています。PropertyPlaceholderConfigurer がブール値のプロパティをロードしないという一般的な問題がある場合、他のプロパティ ファイルに問題がないのは奇妙です。ライブラリが Commons Configuration を使用しているため、競合が発生しているということですか? Spring がこれらのプロパティをどのようにロードするかについての私の知識はかなり浅いので、これは内部で何が起こっているかをよりよく理解するチャンスのように思えます。
何が起こっているのか、それを修正/回避する方法について誰かが光を当てることができれば、どんな助けも大歓迎です!
java - 複数のプロパティ ファイルから更新されたプロパティを自動的に読み込む
私の要件は、プロパティ ファイルに変更が加えられたときに、アプリケーションの構成を自動的に更新することです。
プロパティを維持するために、Apache Commons Configuration プロジェクトの PropertiesConfiguration を使用しています (commons-configuration-1.6.jar を使用)。
FileChangedReloadingStrategy を使用すると、単一のプロパティ ファイルに加えられた変更に対してうまく機能し、アプリケーションによって取得されます。
しかし、load メソッドを使用して複数のプロパティ ファイルを使用しており、いずれかのプロパティ ファイルが更新されたときに、変更を検出してプロジェクトの構成を自動的に更新できるようにする必要があります。
FileChangedReloadingStrategy を使用してこの更新を行う方法はありますか?
または、私が利用できると提案する他の方法はありますか?
java - Apache Commons Config で配列と非配列の両方を使用できますか?
次のプロパティ ファイルを使用します。
最初の項目を文字列として、2 番目の項目を配列として取得したいと思います。getString
私はvsgetStringArray
がこれに対処すると思っていたでしょうが、そうではありません -getString("foo")
コンマの前にすべてを取得するだけです。つまり、「こんにちは」です。
を使用して区切り文字の解析を無効にするsetDelimiterParsingDisabled
と、 foo は問題ありませんが、これにより の動作が変更getStringArray("bar")
され、単一要素の配列が返されます。
個々の構成項目を文字列または配列として解釈する方法を明示的に伝える方法が見つかりません。構成項目を異なる区切り文字ルールを持つ個別の構成ファイルに入れたくありません。また、getStringArray の場合の区切り文字としてコンマを使用することをお勧めします。
詳しく説明すると、このスニペットは、hello - 2
またはhello, world! - 1
- I want it to print hello, world! - 2
!のいずれかを出力します。
java - 春に独自の変数インターポレーターを提供できますか?
Spring に<context:property-placeholder>
要素を提供できることを学びました。これは、PropertyPlaceholderConfigurer${foo}
を使用してプロパティ ファイルに対して変数を補間する (つまり、 のようなトークンを置き換える) ように見えます。
トークンの解決に使用されるクラスをカスタマイズする方法はありますか? 特に、プロパティー・ファイルを使用するのではなく、Apache Commons Config オブジェクトを使用してトークンの値を提供したいと考えています。Configuration
apache-commons-config - デフォルトの構成Iterpolatorをカスタムに置き換える
私は、デフォルトでいくつかのフォールバック値を処理するカスタム構成補間器をコモンズ構成に登録しようとしています。
これが補間器のコードです。
これが私の構成ビルダーの外観です
これが、構成ビルダーをインスタンス化する方法です。
何らかの理由で、カスタム補間器のルックアップメソッドが呼び出されることはありません。カスタム補間器の登録に成功した場合、誰かが助けてくれますか?
前もって感謝します。