web-dev-qa-db-ja.com

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

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

169
Rys

私はちょうどSpring Cloudの人たちに聞いて、私がここに持っている情報を共有すべきだと考えました。

bootstrap.ymlapplication.ymlの前にロードされます。

これは通常、以下の目的で使用されます。

  • spring Cloud Config Serverを使用するときは、spring.application.nameの内側にspring.cloud.config.server.git.uriおよびbootstrap.ymlを指定する必要があります
  • いくつかのencryption/decryption情報

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

214
Michael Isvy

bootstrap.ymlまたはbootstrap.properties

Spring Cloudを使用していて、アプリケーションの設定がリモート設定サーバー(例えばSpring Cloud Config Server)に保存されている場合にのみ使用または必要とされます。

ドキュメントから:

Spring Cloudアプリケーションは、メインアプリケーションの親コンテキストである「ブートストラップ」コンテキストを作成することによって動作します。 箱から出してすぐに外部のソースから設定プロパティを読み込む、そしてまたローカルの外部設定ファイルの中のプロパティを復号化します。

bootstrap.ymlまたはbootstrap.propertiescanには追加の設定(デフォルトなど)が含まれていますが、一般的にここではbootstrap configを設定するだけで済みます。

通常、これは2つのプロパティを含みます。

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

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

application.ymlまたはapplication.properties

標準的なアプリケーション設定が含まれます。ブートストラッププロセス中に取得された設定はここで定義された設定を上書きするため、通常はデフォルト設定です。

60
dustin.schultz

この答えは著書「Java開発者のためのマイクロサービスインタビューの質問(Spring Boot、Spring Cloud、Cloud Native Applications)に非常に美しく説明されていますMunish Chandel、バージョン1.30、25.03.2018。

次の内容はこの本から取られており、この答えの総クレジットは本の著者になりますすなわちMunish Chandel

application.yml

application.yml/application.properties fileは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 =あなたのアプリケーションのニーズに応じてこれらのプロパティをカスタマイズできます。サンプルファイルを以下に示します。

春:アプリケーション:名前:foobarデータソース:driverClassName:com.mysql.jdbc.ドライバーのURL:jdbc:mysql:// localhost/testサーバー:port:9000

bootstrap.yml

---一方、bootstrap.ymlspring-cloud-config特有のもので、application.ymlの前にロードされます。

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

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

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

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

application.ymlはマイクロサービスのデフォルト設定を含み、ブートストラッププロセス中に(クラウド設定サーバーから)取得された設定はapplication.ymlで定義された設定を上書きします

13
Vaibhav Sharma

私の2セントだけ。

Bootstrap.ymlまたはBootstrap.propertiesはSpring Cloud Serverから設定を取得するために使用されます。

たとえば、私のBootstrap.propertiesファイルには、次のような設定があります。

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

アプリケーションを起動すると、 http:// localhost:8888 に接続してサービスの設定を取得しようとし、Spring Cloud ConfigサーバーにあるCalculation-service.propertiesを調べます。

起動時にCalcuation-Serviceのログから同じことを検証できます

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

2
dixit gangaiah

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

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

アプリケーションを起動すると、指定されたサーバーに接続し、実行/デバッグ構成に記載されているスプリングプロファイルに基づいて構成を読み取ろうとします。 bootstrap.yml loads the first

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

良い方法:

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

2
Sudip Bhandari

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

  • bootstrap.ymlは、リモート設定がどこにあるかを示すパラメータを保存するために使用され、これらのリモート設定でブートストラップアプリケーションコンテキストが作成されます。

実際、application.ymlと同じように通常のプロパティを格納することもできます。しかし、この難しいことに注意を払ってください。

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

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

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

そのため、スプリングブートでapplication.ymlまたはbootstrap.ymlにプロパティを設定することの違いは次のとおりです。

  • ブートストラップフェーズで設定ファイルをロードするためのプロパティはbootstrap.ymlにのみ置くことができます。
  • 他のすべての種類のプロパティに関しては、それらをapplication.ymlに配置すると優先順位が高くなります。
0
Lebecca