春のブートでapplication.ymlまたはbootstrap.ymlにプロパティを設定することの違いは何ですか? logging.configの場合、アプリケーションは異なる動作をします。
私はちょうどSpring Cloud
の人たちに聞いて、私がここに持っている情報を共有すべきだと考えました。
bootstrap.yml
はapplication.yml
の前にロードされます。
これは通常、以下の目的で使用されます。
spring.application.name
の内側にspring.cloud.config.server.git.uri
およびbootstrap.yml
を指定する必要がありますencryption/decryption
情報技術的には、bootstrap.yml
は、親のSpring ApplicationContext
によってロードされます。その親ApplicationContext
は、application.yml
を使用するものの前にロードされます。
bootstrap.yml
またはbootstrap.properties
Spring Cloudを使用していて、アプリケーションの設定がリモート設定サーバー(例えばSpring Cloud Config Server)に保存されている場合にのみ使用または必要とされます。
ドキュメントから:
Spring Cloudアプリケーションは、メインアプリケーションの親コンテキストである「ブートストラップ」コンテキストを作成することによって動作します。 箱から出してすぐに外部のソースから設定プロパティを読み込む、そしてまたローカルの外部設定ファイルの中のプロパティを復号化します。
bootstrap.yml
またはbootstrap.properties
canには追加の設定(デフォルトなど)が含まれていますが、一般的にここではbootstrap configを設定するだけで済みます。
通常、これは2つのプロパティを含みます。
spring.cloud.config.uri
)spring.application.name
)起動時に、Spring Cloudはアプリケーションの名前で設定サーバーにHTTP呼び出しを行い、そのアプリケーションの設定を取得します。
application.yml
またはapplication.properties
標準的なアプリケーション設定が含まれます。ブートストラッププロセス中に取得された設定はここで定義された設定を上書きするため、通常はデフォルト設定です。
この答えは著書「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.ymlはspring-cloud-config特有のもので、application.ymlの前にロードされます。
bootstrap.ymlあなたがSpring Cloudを使用していてマイクロサービスの設定がリモートのSpring Cloud Config Serverに保存されている場合にのみ必要です。
bootstrap.ymlに関する重要なポイント
spring.application.name: "アプリケーション名" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
起動時に、Spring CloudはSpring Cloud Config Serverにアプリケーションの名前でHTTP(S)呼び出しを行い、そのアプリケーションの設定を取得します。
application.ymlはマイクロサービスのデフォルト設定を含み、ブートストラッププロセス中に(クラウド設定サーバーから)取得された設定はapplication.ymlで定義された設定を上書きします
私の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
Bootstrap.ymlはサーバーから設定を取得するために使用されます。これはSpringクラウドアプリケーション用でも他のアプリケーション用でもあります。通常は次のようになります。
spring:
application:
name: "app-name"
cloud:
config:
uri: ${config.server:http://some-server-where-config-resides}
アプリケーションを起動すると、指定されたサーバーに接続し、実行/デバッグ構成に記載されているスプリングプロファイルに基づいて構成を読み取ろうとします。
サーバーにアクセスできない場合、アプリケーションはさらに先へ進むことができない可能性があります。ただし、プロファイルに一致する設定がローカルに存在する場合、サーバ設定は上書きされます。
良い方法:
ローカル用に個別のプロファイルを維持し、さまざまなプロファイルを使用してアプリを実行します。
まあ、私は完全にこの点ですでに存在する答えに同意する:
bootstrap.yml
は、リモート設定がどこにあるかを示すパラメータを保存するために使用され、これらのリモート設定でブートストラップアプリケーションコンテキストが作成されます。実際、application.yml
と同じように通常のプロパティを格納することもできます。しかし、この難しいことに注意を払ってください。
bootstrap.yml
にプロパティを配置すると、application.ymlを含む他のほとんどのプロパティソースよりも優先順位が低くなります。説明したように ここで 。明確にしておきましょう。bootstrap.yml
に関連する2種類のプロパティがあります。
bootstrap.yml
を使用します。この方法で取得したプロパティは優先順位が高いため、ローカルの設定で上書きすることはできません。説明したように ここで 。bootstrap.yml
に含まれるプロパティ先に説明したように、それらは優先順位が低くなります。デフォルトを設定するためにそれらを使用することはおそらく良い考えです。そのため、スプリングブートでapplication.yml
またはbootstrap.yml
にプロパティを設定することの違いは次のとおりです。
bootstrap.yml
にのみ置くことができます。application.yml
に配置すると優先順位が高くなります。