問題タブ [spring-profiles]

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.

0 投票する
8 に答える
206317 参照

java - Springで現在のアクティブ/デフォルトの環境プロファイルをプログラムで取得するにはどうすればよいですか?

現在のさまざまな環境プロファイルに基づいて、さまざまなロジックをコーディングする必要があります。

Spring から現在アクティブなデフォルトのプロファイルを取得するにはどうすればよいですか?

0 投票する
1 に答える
211 参照

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()が呼び出された時点で、アクティブなプロファイルがまだ存在しないように見えることです。アクティブなプロファイルを検出するために私が行っていることは次のとおりです。

  1. StandardEnvironmentのインスタンスを作成します
  2. getActiveProfiles()を呼び出す

(2)常に空の配列を返すようです。これは、Springプロファイルがアクティブ化される前にプロパティプレースホルダーの解決が行われることを意味します。これは正しいです??

Beanの作成、プロパティファイルのロードなど、Springコンテキストのロード中の他のイベントに関連して、アクティブなプロファイルはいつ設定されますか?

resolvePlaceHolder()が呼び出されたときにアクティブなプロファイルを検出することは可能ですか?代わりに別のクラスを拡張する必要がありますか?

0 投票する
1 に答える
46655 参照

java - プロファイルがアクティブでない場合のBean定義を含める

私のアプリケーションでは、いくつかのプロファイルを使用して、特定のBeanを自動配線の対象にします。私が見逃しているのは、特定のプロファイルがアクティブでないときにBeanを自動配線の対象にする可能性です。

私が考えたそれを行うための最良の方法は次のようなものです:

  1. {A、B、C、D}など、考えられるすべてのプロファイルのリストがあるとします。
  2. 特定の実行に対してアクティブなプロファイルは{A、C}です。
  3. 私がしていることは、アクティブではないすべての可能なプロファイルに対して人工的なプロファイルを作成することです。この例では、{not_B、not_D}プロファイルを作成します。
  4. 非アクティブなプロファイルに基づいてアクティブにしたいBeanはX、プロファイルに対してアクティブにしますnot_X。私の場合、プロファイルBがアクティブでないときに、Beanを自動配線の対象にしたい場合は、それらに注釈を付けます。@Profile("not_B")

ただし、このソリューションには、考えられるすべてのプロファイルに関する事前の知識が必要です。

より良い解決策を思いつくことができますか?

0 投票する
1 に答える
1698 参照

java - 春のプロファイル グループ

実行したいプロファイルを指定できるアプリケーションがあります。しかし、これらのプロファイルを資格情報、アプリケーションのパフォーマンス、メモリ印刷、アプリケーションの動作などにグループ化したいとも考えています。次のプロファイルを実行できます

しかし、私はそれを次のように初期化することを好みます

また

これは、 How to set active spring 3.1 environment profile via a propertyes file and not via an env variable or system property のようなカスタム コードを記述せずに実現でき ます。これらをプロパティ ファイルから、または spring-xml 構成内でロードできても問題ありません。spring 3.1 で xml のみの構成を使用しています。

0 投票する
2 に答える
3314 参照

java - rooプロジェクトでjavax.persistence.Table@Tableアノテーションを使用して、Maven(またはSpring)を使用してビルドプロファイルからスキーマを設定するにはどうすればよいですか?

タイトルに書かれていることとほぼ同じです。@Tableアノテーションがビルド時に使用するスキーマをmaven(またはroo)に管理させたいです。

私は試した

しかし、これはMavenが機能することを意図した方法ではないという結論に達しました。

0 投票する
6 に答える
147329 参照

spring - スプリング プロファイル変数の設定

と の 2 つの Spring プロファイルがdevありtestます。サーバー環境でアクティブなプロファイルを設定したいのですが、コードで設定したくないので、アプリケーションをデプロイするたびに、サーバーのプロファイルに基づいてプロファイルが読み込まれます。どうやってやるの?

0 投票する
0 に答える
581 参照

spring - Spring プロファイル、コードベースの構成、および JNDI

新しい Spring 3.x コード ベースの @Configuration スタイルに移行しています。ここまではうまくいきましたが、C3p0 接続プール @Profile("standalone") の代わりに @Profile("production") を追加して JNDI データ ソースを選択しようとすると、次のようになります。

もちろん、詳細はたくさんありますが(参考のために以下にいくつか含めました)、私の質問は次のとおりです。

ありがとう、

詳細:

  • XML と同じ構成が正常に機能し、
  • web.xml は、AppConfig.class で構成されたルート コンテキストと、WebConfig.class で構成されたサーブレット コンテキストを指します。
  • AppConfig には @Import(SomeConfig.class) があり、サービス レイヤー プロジェクトから構成をプルします。依存関係は Maven によって配線されます。
  • SomeConfig クラスには、C3p0 データソースに @Profile("standalone") があります。
  • AppConfig クラスには、JNDI データソースに @Profile("production") があり、web.xml は spring.profiles.default=production を定義します。

編集:解決済み

プロファイルを適切な場所に移動しました。現在、それらは同じファイルと同じプロジェクトにあります。

0 投票する
1 に答える
1008 参照

spring - スプリングの spring.profiles.active と組み合わせて、アクティブなプロファイルをスプリングに追加する方法

web.xml spring.profiles.active を介していくつかのスプリング プロファイルを有効にしていますが、これは展開チームがプロファイルをアクティブ化する方法であるため、そのままにしておきたいと思います。さらに、プロパティ ファイルの存在に基づいて、さらにいくつかのプロファイルを有効にしたいと考えています。だから私は ApplicationContextInitializer を追加しました

しかし、Spring は spring.profiles.active コンテキスト パラメータを無視し、メイン プロファイルをロードしません。

誰もそれを行う方法を知っていますか?

ServletContextListener を追加して、プロファイルを spring.profiles.active パラメータに追加できると思いますが、これはちょっと見苦しいと思います。

0 投票する
1 に答える
6859 参照

spring - 統合テストでの Spring @ActiveProfile の使用

@Profile Spring アノテーションを使用して、組み込み、スタンドアロン、およびコンテナー管理のデータ ソースを選択しています。「埋め込み」を選択するために、適切なプロファイルをアクティブにするように統合テストに注釈が付けられます。

問題は、'@ActiveProfiles' を TestConfigWrapper に移動したいのですが、これを行っても取得されず、アプリケーション コンテキストが DataSource をロードしません。

これは、すべての統合テストに @ActiveProfile で注釈を付ける必要があることを意味します。これは事実上、統合テストのボイラープレートになり、将来のリファクタリングを簡単に妨げる可能性があることを意味します。

Java configを使用してこれを行う方法はありますか?

0 投票する
2 に答える
3245 参照

spring - 特定のプロファイルでスプリング コンテキストをインポートする

私の java-spring-maven Web アプリケーションでは、複数のスプリング コンテキスト (プロジェクトごとに 1 つのコンテキスト) を使用しています。簡単にするために、2 つのスプリング コンテキスト a.xml と b.xml があり、それぞれがプロジェクト A とプロジェクト B に属し、A が B に依存しているとします。

a.xml は、次のように b.xml をインポートしています。

したがって、a.xml をロードすると、b.xml もロードされます。

現在、私のシステムには 2 つのスプリング プロファイルがあります。コンテキストで使用される te​​stとproductionです (プロファイルごとに異なるプロパティ プレース ホルダーをロードします)。

だから私は得たa.xmlで:

そして、b.xml での同じ規則 (異なるプロパティ ファイルのみをロードする)。プロパティ ファイルは src/main/resources (運用ファイル) と src/test/resources (テスト ファイル) の下にあります。

これで、次のような単体テストができました。

この場合、a.xml は「テスト」プロファイルにロードされ、期待どおりに目的のファイルがロードされます (test-props-for-a)。b.xml は a.xml によってインポートされますが、b.xml からロードされたプロパティ ファイルのプロパティ値が挿入されないという奇妙な経験が発生しました。

たとえば、プロパティ ファイルに次のプロパティがあるとします。

そして私のクラスで私は得ました:

connectionIP の値は、「1.2.3.4」ではなく「${connection-ip}」になります。

ファイルの場所が で始まりclasspath*、* が含まれていないことに注意してください。FileNotFoundException が発生します。

明確にするために、ファイル test-props-for-b.properties はプロジェクト B の src/test/resources の下にあります。なぜこれを取得するのですか?

b.xml を直接 (a.xml 経由でインポートせずに) ロードするテストを実行すると、正常に動作し、ファイル test-props-for-b.properties のテスト プロパティが期待どおりにロードされます。

私は何か間違ったことをしていますか?これはバグでしょうか?もしそうなら、回避策を提案できますか?

アップデート

プロパティ ファイル (test-props-for-b.properties) へのパスからスター (*) を削除し、Spring コードをデバッグしました。クラス ClassPathResource では、このメソッドは例外をスローします。

変数の値は次のとおりです。

this.clazz はヌルです。this.path はファイル名 test-props-for-b.properties を保持します

そして、このコマンドは null を返します。

this.classLoader.getResourceAsStream(this.path);

何故ですか?プロジェクト B の src/test/resources の下にファイルがはっきりと表示されます。