web-dev-qa-db-ja.com

Springの「spring.profiles.include」オーバーライド

私の意図は、スプリングブートアプリケーションに2つのプロファイル(開発用と本番用)を持たせることです。開発プロファイルは、プロダクションプロファイルの一部の変数(クラウド内のデータベースではなく、インメモリデータベースなど)をオーバーライドするためのものです。将来的に生産プロファイルにいくつかの変更が加えられると予想されるため、開発プロファイルで変数を複製することは解決策ではないようです。

したがって、 Spring Reference で、spring.profiles.includeは参照されたプロファイルからのみプロパティを追加することになっているが、私がチェックしたものからオーバーライドすることを読んだ。したがって、2つのプロファイルfooとbarを別々のyamlファイルに持つ場合:

application-foo.yaml:

myproperty: 44

application-bar.yaml:

spring:
  profiles:
    include: foo
    active: bar,foo
myproperty: 55

IDEで-Dspring.profiles.active=bar変数を設定すると、mypropertyのランタイム値は44です。つまり、barは、プロパティのみを追加することになっているfooでオーバーライドされます。 、しかしそれらを無効にしないでください。アプリケーションを起動すると、次のメッセージが表示されます。

次のプロファイルがアクティブです:foo、bar

これが示唆するようにspring.profiles.active=barapplication-bar.yamlを追加しました answer 、別の質問で、それは効果がありません-プロパティがあるかどうかに違いはありません(私も試しましたカンマ区切り値の代わりにダッシュリストを使用します)。

私の質問は、それがどのように機能するはずなのかということです(そしてSpring Referenceは誤解を招く)?もしそうなら、その解決策はありますか?

link をgithubのアプリケーションソースコードに追加します。

12

Springのアクティブプロファイルは、わずかに異なる方法で実装しました。デフォルトのプロパティファイルapplication.ymlには、運用環境と開発環境の両方で同じすべてのデフォルト値が含まれているとします。

application-prd.ymlおよびapplication-dev.ymlという名前のプロダクションファイルと開発ファイルに個別のプロパティを作成します。これらのファイルには、追加のプロパティが含まれているか、デフォルトのプロパティの一部が上書きされる場合があります。

アプリケーションの起動時に、spring.profiles.activeを環境変数として渡します。例えば、

-Dspring.profiles.active=prd

application-prd.ymlとともにapplication.ymlを取得します

または

-Dspring.profiles.active=dev

application-dev.ymlとともにapplication.ymlを取得します

10
Indra Basak

スプリングブートのドキュメントによると herespring.profiles.includeは、他のプロファイルからプロパティを追加するために使用されます。プロパティがアクティブなプロファイルに存在しない場合、他のプロファイルからプロパティを追加します。ただし、存在する場合は上書きされ、最後に適用されるものが優先されます

5
pvpkiran