春のブートでapplication.ymlまたはbootstrap.ymlにプロパティを置くことの違いは何ですか?


251

春のブートでapplication.ymlまたはbootstrap.ymlにプロパティを置くことの違いは何ですか?logging.configの場合、アプリケーションの動作は異なります。


14
bootstrap.yml [ spring-cloud-config](cloud.spring.io/spring-cloud-config/…))に固有のものであり、正しい構成を見つけるために使用される構成です。したがって、おそらくそこにあるconfigはapplication.properties/yamlの前にロードされます
zapl

回答:


296

Spring Cloudみんなに聞いたところ、ここにある情報を共有したいと思った。

bootstrap.ymlはの前に読み込まれapplication.ymlます。

通常、次の場合に使用されます。

  • Spring Cloud Config Serverを使用する場合はspring.application.namespring.cloud.config.server.git.uri内部で指定する必要がありますbootstrap.yml
  • いくつかのencryption/decryption情報

技術的にbootstrap.ymlは、親のSpringによってロードされApplicationContextます。その親ApplicationContextは、を使用する親の前にロードされますapplication.yml


6
構成サーバーがこれらのパラメーターを配置する必要がある理由を説明してもらえますbootstrap.ymlか?
2016

30
Spring Cloudを使用する場合、「実際の」構成データは通常サーバーからロードされます。URL(およびパスワードなどの他の接続構成)を取得するには、以前の構成または「ブートストラップ」構成が必要です。したがって、実際の構成データをロードするために使用されるbootstrap.ymlに構成サーバー属性を配置します(これは通常、application.ymlの内容をオーバーライドします(存在する場合))。
Mike Mansell

10
いつ春が新しいエキサイティングな機能をもたらすのか、仕様よりも慣習を後にするか、すでに慣例を想定しているため、何も指定する必要がなく、春ではなく、春のブーツでなければすべてが自然に解決され、将来の春になるかもしれませんboot-boot;)
Saurabh 2017年

あなたが言うとき、bootstrap.ymlはapplication.ymlの前にロードされます。しかし、application.ymlを削除すると、私のアプリケーションはbootstrap.ymlを読みません。何故ですか?
ジェシー

ブートストラップファイルは優先順位が高いため、オーバーライドされないことを強調する必要があります。ドキュメントによると、Team's Spring
kelgwiin

84

bootstrap.yml または bootstrap.properties

これは、Spring Cloudを使用していて、アプリケーションの構成がリモート構成サーバー(Spring Cloud Config Serverなど)に保存されている場合にのみ使用/必要になります。

ドキュメントから:

Spring Cloudアプリケーションは、メインアプリケーションの親コンテキストである「ブートストラップ」コンテキストを作成することによって動作します。デフォルトでは、外部ソースから構成プロパティをロードし、ローカルの外部構成ファイルのプロパティを復号化します。

なお、bootstrap.ymlまたはbootstrap.properties することができ、追加の設定(たとえば、デフォルト)が、一般的に、あなたはここでしかブートストラップ設定を配置する必要がありますが含まれています。

通常、2つのプロパティが含まれます。

  • 構成サーバーの場所(spring.cloud.config.uri
  • アプリケーションの名前(spring.application.name

起動時に、Spring Cloudはアプリケーションの名前を使用して構成サーバーにHTTP呼び出しを行い、そのアプリケーションの構成を取得します。

application.yml または application.properties

ブートストラッププロセス中に取得された構成はここで定義された構成をオーバーライドするため、標準のアプリケーション構成が含まれています。通常はデフォルトの構成です。


34

この答えは非常に美しく、「本の中で説明してきたJavaの開発者(春ブーツ、春クラウド、クラウドネイティブ・アプリケーション)について、Microservicesのインタビューの質問をすることによってMunish Chandel、バージョン1.30、2018年3月25日。

次の内容はこの本から抜粋されたものであり、この回答の全クレジットは本の著者、すなわちミュニッシュシャンデルに寄付されます。

application.yml

application.yml / application.propertiesファイルは、Spring Bootアプリケーションに固有です。アプリケーションの外部プロパティの場所を変更しない限り、Spring Bootは常に次の場所からapplication.ymlをロードします

/src/main/resources/application.yml

アプリケーションのすべての外部プロパティをこのファイルに保存できます。Spring Bootプロジェクトで使用できる共通のプロパティは、https//docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.htmlにあります。これらのプロパティは、次のようにカスタマイズできます。アプリケーションのニーズごと。サンプルファイルを以下に示します。

spring:
    application:
        name: foobar
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost/test
server:
    port: 9000

bootstrap.yml

一方、bootstrap.ymlspring-cloud-configに固有であり、application.ymlの前にロードされます

bootstrap.ymlは、Spring Cloudを使用していて、マイクロサービス構成がリモートのSpring Cloud Config Serverに保存されている場合にのみ必要です。

bootstrap.ymlに関する重要なポイント

  1. Spring Cloud Configサーバーで使用する場合、以下のプロパティを使用して、アプリケーション名と構成gitの場所を指定する必要があります。
spring.application.name: "アプリケーション名"
spring.cloud.config.server.git.uri: "git-uri-config"

  1. マイクロサービス(クラウド構成サーバー以外)で使用する場合は、以下のプロパティを使用して、構成サーバーのアプリケーション名と場所を指定する必要があります
spring.application.name: 
spring.cloud.config.uri: 
  1. このプロパティファイルには、eurekaサーバーの場所、暗号化/復号化関連のプロパティなど、Spring Cloud環境に関連する他の構成を含めることができます。

起動時に、Spring Cloudはアプリケーションの名前を使用してSpring Cloud Config ServerにHTTP(S)呼び出しを行い、そのアプリケーションの構成を取得します。

application.ymlにはマイクロサービスのデフォルト構成が含まれており、ブートストラッププロセス中に(クラウド構成サーバーから)取得された構成は、application.ymlで定義された構成をオーバーライドします


5

ちょうど私の2セントここ..

Bootstrap.ymlまたはBootstrap.propertiesは、Spring Cloud Serverから構成をフェッチするために使用されます。

たとえば、My Bootstrap.propertiesファイルに次の構成があります

spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888

アプリケーションの起動時に、http:// localhost:8888に接続してサービスの構成をフェッチし、Spring Cloud ConfigサーバーにあるCalculation-service.propertiesを確認します

起動時にCalculation-Serviceのログから検証できます

INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888


4

まあ、私はこの点ですでに存在する答えに完全に同意します:

  • bootstrap.ymlリモート構成の場所を示すパラメーターを保存するために使用され、これらのリモート構成を使用してブートストラップアプリケーションコンテキストが作成されます。

実際には、通常のプロパティを何と同じように保存することもできapplication.ymlます。しかし、このトリッキーなことに注意してください:

  • プロパティをに配置するとbootstrap.yml、application.ymlなど、他のほとんどのプロパティソースよりも優先順位が低くなります。ここで説明されています

明確にしましょう。関連するプロパティには次の2種類がありますbootstrap.yml

  • ブートストラップ段階で読み込まれるプロパティ。bootstrap.ymlプロパティホルダー(ファイルシステム、gitリポジトリなど)を見つけるために使用します。この方法で取得したプロパティは優先順位が高いため、ローカル構成で上書きできません。ここで説明されています
  • にあるプロパティbootstrap.yml。最初に説明したように、優先順位は低くなります。それらを使用してデフォルトを設定することをお勧めします。

したがって、プロパティを春のブーツの上application.ymlまたはbootstrap.yml中に置くことの違いは次のとおりです。

  • ブートストラップ段階で構成ファイルをロードするためのプロパティは、にのみ配置できますbootstrap.yml
  • 他のすべての種類のプロパティについては、それらを配置application.ymlすると優先順位が高くなります。

3

Bootstrap.ymlはサーバーから設定を取得するために使用されます。これは、Springクラウドアプリケーションまたはその他のアプリケーション向けです。通常は次のようになります。

spring:
  application:
    name: "app-name"
  cloud:
    config:
      uri: ${config.server:http://some-server-where-config-resides}

アプリケーションを起動すると、指定されたサーバーに接続し、実行/デバッグ構成で説明されているSpringプロファイルに基づいて構成を読み取ろうとします。 bootstrap.ymlは最初のものをロードします

サーバーに到達できない場合、アプリケーションはさらに先に進むことができなくなる可能性があります。ただし、プロファイルに一致する構成がローカルに存在する場合、サーバー構成は上書きされます。

良いアプローチ:

ローカル用に個別のプロファイルを維持し、さまざまなプロファイルを使用してアプリを実行します。


1

bootstrap.ymlのもう1つの用途は、kubernetes configmapシークレットリソースから構成をロードすることです。アプリケーションは、spring-cloud-starter-kubernetes依存関係をインポートする必要があります。

Spring Cloud Configと同様に、これはブートストラップフレーズの間に行う必要があります。

ドキュメントから:

spring:
  application:
    name: cloud-k8s-app
  cloud:
    kubernetes:
      config:
        name: default-name
        namespace: default-namespace
        sources:
         # Spring Cloud Kubernetes looks up a ConfigMap named c1 in namespace default-namespace
         - name: c1

したがって、meta.name default-nameを使用してconfigmapリソースに格納されたプロパティは、application.ymlのプロパティと同じように参照できます。

そして同じプロセスが秘密に適用されます:

spring:
  application:
    name: cloud-k8s-app
  cloud:
    kubernetes:
      secrets:
        name: default-name
        namespace: default-namespace
        sources:
         # Spring Cloud Kubernetes looks up a Secret named s1 in namespace default-namespace
         - name: s1

0

Bootstrap.ymalは、Spring Bootアプリケーションの起動時にロードされる最初のファイルであり、application.propertyはアプリケーションの起動時にロードされます。したがって、アプリケーションのロード中に必要なbootstrap.ymalの構成サーバーの認証情報などであり、application.propertiesでデータベースのURLなどになる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.