問題タブ [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.
spring - PropertySourcesPropertyResolver でのプロパティ ソースの順序
これは私の設定クラスの一部です:
問題は、SystemEnvironmentPropertySource
「ユーザー名」プロパティも含まれておりResourcePropertySource
、プロパティソースのリスト順のため、プロパティファイルに基づいて、前に処理されていることです。したがって、「username」プロパティの間違った値がロードされます。システム環境プロパティの前にファイル内のプロパティを処理する方法は何ですか?
spring - 定数を使用してプロパティを解決するときに @Value で Spring-EL を使用する方法
定数を使用してプロパティを定義し、@Value アノテーションで解決しようとしています。
インターフェイスで定数を定義しました:
私はspringbootを使用しており、プロパティをデフォルトのプロパティとしてコンテキストに追加しています:
ここで、@Value を使用して、文字列「MyStartableJob」を文字列に挿入したいと思います。しかし、直接使用する代わりに@Value(value="${javabatch.jobName})
、定義済みの定数を使用したいと思います。
私は試した
もちろん、これは「javabatch.jobName」にのみ解決され、「javabatch.jobName」という名前のプロパティの値には解決されません。
だから私はそれをラップしようとしました@Value(value="${#{T(ch.mobi.javabatch.core.internal.InternalConstants).JOB_NAME_PROPERTY}}")
が、これは例外を引き起こします。
環境を単純に注入し、その getProperty メソッドを使用できることはわかっています。
これは機能し、私の目的を果たします。しかし、@Value で SPEL を使用してこれを行うこともできるのではないかと思います。
ありがとう。
spring-boot - Spring Bootは構成コードでコマンドライン引数を取得します
SpringバッチプロジェクトでSpringブートを取得しました。BatchConfiguration 内でコマンド ライン引数を取得したいので、@Autowire Environment オブジェクトを取得してプロップを取得しようとしましたが、null になっています。
いくつかのデバッグの後、特別なプロパティ名「nonOptionArgs」を介してすべてのコマンドライン引数を取得できることがわかりましたが、この場合、渡されたすべての引数のプレーン文字列を取得しました。より良い解決策はありますか?
ありがとう
java - 後で使用するためにSpring-bootのSpring環境に値を設定/配置
にいくつかの値を設定または入れる方法はありましたorg.springframework.core.env.Environment
か?
以下のバージョンのSpring-bootを使用しています。
Spring はデフォルトで読み込まapplication.properties
れorg.springframework.core.env.Environment
ます。@Autowired Environment と getString("key") で値を取得できます。
ライセンス ファイルがあり、それをデコードしてライセンス期間をロードし、このシステムがまだ有効かどうかを検証するとしinitialize()
ますApplicationContextInitializer
。
Environment
後で使用するために、このライセンス期間を保存したいと考えています。たとえば、ユーザーが特定のリクエストを毎回送信する場合、ライセンス期間を再度検証します。そのため、ライセンス ファイルをロードして毎回デコードする必要はありません。
それとも、より適切な他の方法でこの目的を達成できますか?
どんな助けでも大歓迎です。
java - 春豆を動的に注入する
Java-spring web-app では、Bean を動的に注入できるようにしたいと考えています。たとえば、2 つの異なる実装を持つインターフェイスがあります。
私のアプリでは、いくつかのプロパティ ファイルを使用してインジェクションを構成しています。
私のインジェクションは、プロパティ ファイル内のプロパティ値を条件付きで中継して実際にロードされました。たとえば、この場合 myinterface.type=implA MyInterface を注入する場所はどこでも、注入される実装は ImplA になります ( Conditional アノテーションを拡張することで実現しました)。
実行時にそれを希望します-プロパティが変更されると、次のことが起こります(サーバーの再起動なし):
- 適切な実装が注入されます。たとえば、
myinterface.type=implB
ImplB を設定すると、MyInterface が使用されている場所にいつでも注入されます - Spring Environmentを新しい値でリフレッシュし、Bean にも再注入する必要があります。
コンテキストを更新することを考えましたが、それは問題を引き起こします。インジェクションにセッターを使用し、プロパティが再構成されたらそれらのセッターを再利用することを考えました。そのような要件のための作業慣行はありますか?
何か案は?
アップデート
一部の人が示唆したように、両方の実装 (ImplA と ImplB) を保持するファクトリ/レジストリを使用し、関連するプロパティをクエリして正しいものを返すことができます。もしそうしても、私にはまだ 2 番目の課題があります。それは環境です。たとえば、レジストリが次のようになっているとします。
プロパティが変更されたら、環境に再注入する必要があります。そのための提案はありますか?
コンストラクターの代わりにメソッド内でその env を照会できることはわかっていますが、これはパフォーマンスの低下であり、環境を再注入するための ider を考えたいと思います (これもセッター注入を使用する可能性がありますか?)。
java - applicationConfig PropertySource を新しい環境に追加する
現在、既存のアプリケーションを Spring Boot 1.2 に移行する作業を行っています (Mule 3 を使用しています。Spring 4.2 とは互換性がありません)。このアプリケーションには、Bean 定義を含むアプリケーションに含まれる XML ファイルを読み取ることによっていくつかの ClasspathXmlApplicationContexts を作成することにより、Mule ブートストラップ プロセスを実行するライブラリ提供の (私は変更できません) サーブレットが含まれています。
私の問題は、この XML ファイルには、アクティブなプロファイルに基づいて異なる方法で解決する必要があるいくつかのプレースホルダーが含まれていることです (そして、これらの変数を異なるプロファイルで application.yml ファイルに保存しました)。新しいアプリケーション コンテキストによって作成された StandardEnvironments。
YML ファイルを .properties ファイルに変換し、この各 XML ファイル内に同じ application-#{systemProperties['spring.profiles.active']}.properties を指す新しい PropertyPlaceholderConfigurer を作成できますが、次のようになります。
慣習と優先順位を使用して .properties ファイルをさまざまな内部/外部の場所に配置する Boot の柔軟性が失われます。これは、さまざまな環境に移行するアプリケーションにとって便利に思えます。
同じ定義を何度か追加する必要がある場合は、無視しているプログラムによる方法があると思います。
それらを作成するクラスを変更するアクセス権を持たずに、新しく作成されたすべての ApplicationContexts に applicationConfig PropertySource のコンテンツを追加する方法を知っている人はいますか? Spring Boot 1.2 には、これを行うための EnvironmentPostProcessor の素晴らしさはありません。