![](/img/trans.png)
[英]In spring-cloud project, is it ok to replace application.yml with bootstrap.yml totally?
[英]What is the difference between putting a property on application.yml or bootstrap.yml in spring boot?
在 spring boot 中將屬性放在 application.yml 或 bootstrap.yml 上有什么區別? 在 logging.config 情況下,應用程序的工作方式不同。
我剛剛問了Spring Cloud
人,並認為我應該在這里分享我所擁有的信息。
bootstrap.yml
在application.yml
之前加載。
它通常用於以下情況:
bootstrap.yml
指定spring.application.name
和spring.cloud.config.server.git.uri
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
可以包含其他配置(例如默認值),但通常您只需要在此處放置 bootstrap 配置。
通常它包含兩個屬性:
spring.cloud.config.uri
)spring.application.name
)啟動時,Spring Cloud 使用應用程序的名稱對配置服務器進行 HTTP 調用,並檢索該應用程序的配置。
application.yml
或application.properties
包含標准應用程序配置 - 通常是默認配置,因為在引導過程中檢索到的任何配置都將覆蓋此處定義的配置。
這個答案在Munish Chandel 的“微服務面試問題,Java 開發人員(Spring Boot、Spring Cloud、雲原生應用程序) ”一書中得到了非常精美的解釋,版本1.30,2018 年 3 月 25日。
以下內容摘自本書,此答案的全部功勞歸於本書的作者,即Munish Chandel
應用程序.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
引導程序.yml
bootstrap.yml另一方面特定於spring-cloud-config並且在application.yml之前加載
bootstrap.yml僅在您使用 Spring Cloud 並且您的微服務配置存儲在遠程 Spring Cloud 配置服務器上時才需要。
關於 bootstrap.yml 的要點
spring.application.name: "application-name" spring.cloud.config.server.git.uri: "git-uri-config"
spring.application.name: spring.cloud.config.uri:
啟動時,Spring Cloud 使用應用程序的名稱對 Spring Cloud 配置服務器進行 HTTP(S) 調用,並檢索該應用程序的配置。
application.yml 包含微服務的默認配置,並且在引導過程中檢索到的任何配置(從雲配置服務器)將覆蓋 application.yml 中定義的配置
好吧,我完全同意在這一點上已經存在的答案:
bootstrap.yml
用於保存指出遠程配置在哪里的參數,並使用這些遠程配置創建Bootstrap 應用程序上下文。 實際上,它也可以像application.yml
一樣存儲普通屬性。 但是要注意這個棘手的事情:
bootstrap.yml
,它們的優先級將低於幾乎任何其他屬性源,包括 application.yml。 如上所述這里。 讓我們說清楚,有兩種與bootstrap.yml
相關的屬性:
bootstrap.yml
來查找屬性持有者(文件系統、git 存儲庫或其他東西),並且我們通過這種方式獲得的屬性具有高優先級,因此它們不能被本地配置覆蓋。 如上所述這里。bootstrap.yml
中的屬性。 如前所述,它們將獲得較低的優先級。 使用它們來設置默認值可能是個好主意。 所以在 spring boot 中將屬性放在application.yml
或bootstrap.yml
上的區別是:
bootstrap.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] cccConfigServicePropertySourceLocator : 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}
當我們啟動應用程序時,它會嘗試連接到給定的服務器並根據運行/調試配置中提到的 spring 配置文件讀取配置。
如果服務器無法訪問,應用程序甚至可能無法繼續進行。 但是,如果本地存在與配置文件匹配的配置,則服務器配置將被覆蓋。
好辦法:
為本地維護一個單獨的配置文件,並使用不同的配置文件運行應用程序。
bootstrap.yml 的另一個用途是從 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
因此,可以像application.yml 中的屬性一樣引用存儲在 configmap 資源中的帶有 meta.name default-name 的屬性
同樣的過程適用於 secrets :
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
Bootstrap.yml 是啟動 spring boot 應用程序時加載的第一個文件,應用程序啟動時加載 application.property。 因此,您保留的可能是您的配置服務器的憑據等,在加載應用程序期間需要的 bootstrap.yml 中,然后在 application.properties 中您保留的可能是數據庫 URL 等。
bootstrap.yml 在您使用 Spring Cloud 並且您的應用程序的配置存儲在遠程配置服務器(例如 Spring Cloud Config Server)上時使用。 bootstrap.yml 在 application.yml 之前加載
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.