私の意図は、スプリングブートアプリケーションに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=bar
にapplication-bar.yaml
を追加しました answer 、別の質問で、それは効果がありません-プロパティがあるかどうかに違いはありません(私も試しましたカンマ区切り値の代わりにダッシュリストを使用します)。
私の質問は、それがどのように機能するはずなのかということです(そしてSpring Referenceは誤解を招く)?もしそうなら、その解決策はありますか?
link をgithubのアプリケーションソースコードに追加します。
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
を取得します
スプリングブートのドキュメントによると here 、spring.profiles.include
は、他のプロファイルからプロパティを追加するために使用されます。プロパティがアクティブなプロファイルに存在しない場合、他のプロファイルからプロパティを追加します。ただし、存在する場合は上書きされ、最後に適用されるものが優先されます