問題タブ [spring-environment]
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 - Spring 3.1 でのプロパティ プレースホルダーの継承
カスタム プロパティ プレースホルダーを Spring の新しいサポートに移植しようとしてEnvironment
いますが、現在のプレースホルダー マジックの機能を取得する方法がわかりません。
私が望むのは、デフォルトの一連のプロパティ ファイルをクラスパスから読み取り、それらのプロパティを別の場所からの一連のプロパティ ファイルによってオーバーライド (オーバーレイ) することです。他のグループのファイルに設定されているものだけをすべてのプロパティに置き換えたくありません。
Spring 3.1 より前
これで ConfigResourcesFactoryBean は、プレースホルダー構成にフィードするリソースのリストを見つける魔法のような FactoryBean になりました。
customConfig は-DcustomConfig=file://blah/*.properties
またはのように設定できますexport customConfig=file://blah/*.properties
。
ディレクトリのプロパティはblah
、classpath*:META-INF/spring/*.properties
. Resource[]
したがって、工場から返されたものはclasspath*:META-INF/spring*.properties
、それぞれに続くの結合になりfile://blah/*.properties
ます。
Resource[]
これで、工場の代わりにカスタムPropertySources
を作成して PlaceholderConfig に配線できるようになりましたが、上記の値を提供していないようです。
サーブレット環境でのみ機能し、したがって統合テストでは機能しないことを誓うため、使用できませんApplicationContextInitializer
(単体テストのすべてに注釈を追加して、環境が何であるかを伝える気がしません前に行ったようにシステム プロパティを設定します)。
一連のクラスをオーバーライド/実装することなく、ハードコードされたソースのプロパティをカスタム ソースでオーバーレイするにはどうすればよいですか?
spring - PropertiesPlaceholderConfigurerサブクラスはアクティブなSpringプロファイルを検出できますか?
構成ファイルには特定の形式があります。複数のファイル(つまり、dev.properties、uat.properties、prod.properties)を使用する代わりに、すべての値を1つのファイルに保存しますが、環境ごとにプレフィックスで区切ります。例えば:
SERVICE_PORT = 9800
DEV_SERVICE_PORT = 7800
UAT_SERVICE_PORT = 6600
これらの値を検索する既存のクラス(PropertyPlaceholderConfigurerのサブクラス)があり、実行中のIPアドレスに基づいてresolvePlaceHolder()内に追加するプレフィックスを決定します。つまり、特定のIP範囲では、DEV_プレフィックスを使用します。 UAT_プレフィックスを使用します。次に、これらの値は他のBeanに渡されます。場合によっては、コンテキストxmlを使用し、一部のBeanコンストラクターで@ Value${}アノテーションを使用します。プレフィックスの使用は透過的であるため、他のすべての構成はSERVICE_PORTを使用します(例では)
これを変更して、IPを使用する代わりに、アクティブなSpringプロファイルを検出するようにします。web.xmlには、環境のタイプを示すjavaSystemプロパティを検出するカスタムApplicationContextIniitalizerがあります。
私が抱えている問題は、resolvePlaceHolder()が呼び出された時点で、アクティブなプロファイルがまだ存在しないように見えることです。アクティブなプロファイルを検出するために私が行っていることは次のとおりです。
- StandardEnvironmentのインスタンスを作成します
- getActiveProfiles()を呼び出す
(2)常に空の配列を返すようです。これは、Springプロファイルがアクティブ化される前にプロパティプレースホルダーの解決が行われることを意味します。これは正しいです??
Beanの作成、プロパティファイルのロードなど、Springコンテキストのロード中の他のイベントに関連して、アクティブなプロファイルはいつ設定されますか?
resolvePlaceHolder()が呼び出されたときにアクティブなプロファイルを検出することは可能ですか?代わりに別のクラスを拡張する必要がありますか?
java - xml で Spring @PropertySource を定義し、環境で使用する
春のJavaConfigでは、プロパティソースを定義して環境に注入できます
xmlの場合、どうすればよいですか?context:property-placeholder を使用し、JavaConfig クラス @ImportResource で xml をインポートしています。しかし、environment.getProperty("xx") を使用してプロパティ ファイルで定義されたプロパティを取得できません。
spring - Spring 3.1 Envirionment と PropertySource の基本的な使い方
開始時に Spring コンテキストにプロパティ値を注入したいと考えています。Spring 3.1 の新しい Environment および PropertySource 機能を使用してこれを実行しようとしています。
Spring コンテキストをロードするクラスで、独自の PropertySource クラスを次のように定義します。
次に、このプロパティ ソースをアプリケーション コンテキストに追加します。
私の Bean の 1 つで、プロパティ値にアクセスしようとしました。
次のエラーが表示されます。
java.lang.IllegalArgumentException: 原因: java.lang.IllegalArgumentException: 文字列値 [${region}] のプレースホルダー 'region' を解決できませんでした
どんな助けでも大歓迎です
java - 公開Spring 環境へのプロパティ
property-placeholder
次の要素を使用して、XML を介して Spring に登録しているプロパティ ファイルがあります。
@Value
注釈を使用してプロパティにアクセスできます。
ただし、Spring Environment を介してプロパティにアクセスする必要もあります。
getValue()
here はnull
、プロパティ ファイルで定義されたキーの場合でも、常に を返します<property-placeholder>
。この方法でロードされたプロパティを強制的に環境経由でアクセスできるようにする方法はありますか?
spring - 開発と展開のために異なるプロパティをロードする
非常に一般的なユース ケースがあります。プログラムが開発モード、テスト モード、または展開モードのときに、さまざまなデータベースに接続します。
私が今行っている方法は、データ ソースを構成し、bean:property タグを介して ${...} プロパティを渡すことです。
ただし、$ {...}を取得するために、私はやっています
そして、xml構成の下部に、私は持っています
これは非効率的で、過度に冗長で、エラーが発生しやすいようです。すべての春のプロパティのチュートリアルでは、context:property-placeholder は環境に対応しており、環境はプロファイルを担当しているため、これをどのように単純化すればよいでしょうか? もっと簡単な方法があることは私には直感的ですが、私はそれを理解できません。
本当に、私が探しているのは、context:properties-placeholder などでプロファイルを指定することです。
java - 複数の環境用の log4j テンプレート ファイル
さまざまな環境 (dev、ci、prod など) で動作する単一の WAR ファイルが必要であり、Spring 環境は主にユース ケースに対応しています。環境ごとの log4j は優れた項目の 1 つです。他の回答で示唆されているように、環境ごとに log4j 構成を使用できますが、各環境のファイルには多くの繰り返しがあり、異なるのは SMTPAppender の toAddress などのマイナー プロパティだけです。テンプレートのようなlog4j構成ファイルを使用して、各環境で異なる部分を実行時に置き換える簡単な方法はありますか? コンパイル時の選択が発生するため、Maven はここでは機能しません。
私が考えることができる 1 つの解決策は、Log4jConfigurer を拡張していくつかの環境変数を読み取ることです。テンプレートのキーと値のペアをマップし、テンプレート ファイル内のテンプレート変数を実際の値に置き換えてから、DOMConfigurator に渡します。もっと簡単な方法があるかどうか、またはベストプラクティスの観点から間違ったツリーを吠えているかどうかを確認したかっただけです。
前もって感謝します!
java - 複数の環境に対するSpringのベストアプローチ
私は次のものを持っています:
- システム A - 承認 (REST API)
- システム B - 認証を確認する必要がある
- システム C - 認証を確認する必要があります
- システム D - 認証を確認する必要があります
そして、私は多くの環境を持っています:
- 発達
- 同族体
- 製造
の URL はそれぞれ異なりますSystem A
。そのため、それらのシステムを統合するプロジェクトを作成したいと考えています。すべてのシステムは Jersey と Spring を使用するため、ユーザーが承認されていない場合にリクエストを中止するフィルター (jersey) を 1 つ作成できます。
したがって、Integration System
Jerseys フィルターを使用して JAR を作成し、親構成 (Spring の Active プロファイル) を使用して正しい URL を取得するという考え方です。この JAR を使用して、システム Bをシステム Dと通信させることもできます。
秘訣は、この JAR が環境 (親プロジェクトで設定) に基づいて正しい .properties ファイルを取得するようにすることです。正直なところ、どこから始めればよいかわかりません。
私が見つけたSpring EnvironmentのDOCを読む:
より単純なアプローチで作業を完了できる場合は、プロファイルを使用しないでください。プロファイル間で変更されるのがプロパティの値だけである場合、Spring の既存の PropertyPlaceholderConfigurer / だけで十分かもしれません。
3 つの異なるプロパティ ファイル (開発、ホモログ、または運用) を持つことも、異なるキーを持つ 1 つのプロパティ ファイルを持つこともできます。
最善のアプローチは何ですか?あなたならどうしますか?
java - Spring 環境をプロパティとして取得
Properties インスタンスの形式で Spring Environment からプロパティを抽出する方法があるのだろうか (たとえば、ApplicationContext から取得)。または、少なくとも、Spring 環境でプロパティを列挙する方法、またはそれらすべてをマップとして取得する方法、または [最初は不明な] プロパティのセットを Properties オブジェクトに変換する方法はありますか?
Context
とを呼び出しorg.jclouds.ContextBuilder.newBuilder()
てjclouds を作成するには、これが必要.overrides(Properties)
です。アイデアは、.properties ファイルのみを使用して実際のクラウド プロバイダーを構成することであり、アプリケーション ロジックをプロバイダー固有のプロパティと結合したくありません。
[アップデート]
使用する .properties ファイルは を使用して構成<context:property-placeholder>
され、実際には次のようにパスのリストを指定します。
これは、前述の場所のリストで .properties ファイルが順番に検索されることを示唆しています。私は次のことを達成したいと思います:
- この XML 定義ファイルのみに .properties ファイルとその可能な場所のリストを保持します。
- XML で言及されている .properties ファイルのいずれかにjclouds 関連のプロパティを配置できます。
- Spring によって解決およびロードされたプロパティに Properties オブジェクトの形式でアクセスし、それを jclouds にフィードできるようにします
ContextBuilder
。
これがすべて実現可能かどうか教えてください。前もって感謝します!
-ヴラド