Answers:
我刚刚问过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.yml
要么 bootstrap.properties
仅当您使用Spring Cloud且应用程序的配置存储在远程配置服务器(例如Spring Cloud Config Server)上时,才使用/需要它。
从文档中:
Spring Cloud应用程序通过创建“引导”上下文来运行,该上下文是主应用程序的父上下文。开箱即用的是它负责从外部源加载配置属性,并负责解密本地外部配置文件中的属性。
请注意 bootstrap.yml
或bootstrap.properties
可以包含其他配置(例如,默认设置),但是通常您只需要在此处放入bootstrap config。
通常,它包含两个属性:
spring.cloud.config.uri
)spring.application.name
)启动后,Spring Cloud使用应用程序的名称对配置服务器进行HTTP调用,并检索该应用程序的配置。
application.yml
要么 application.properties
包含标准应用程序配置-通常为默认配置,因为在引导过程中检索到的任何配置都将覆盖此处定义的配置。
Munish Chandel在1.30,25.03.2018版的《面向Java开发人员的微服务面试问题(Spring Boot,Spring Cloud,Cloud Native Applications)》中对这一答案进行了非常漂亮的解释。
本书摘录了以下内容,该答案的总贡献归功于该书的作者,即Munish Chandel
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.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中定义的配置。
这里只有我的两分钱..
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。
您可以在启动Calcuation-Service日志时验证它
INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
好吧,我完全同意在这一点上已经存在的答案:
bootstrap.yml
用于保存指出远程配置位置的参数,并使用这些远程配置创建Bootstrap应用程序上下文。实际上,它也可以存储与操作相同的普通属性application.yml
。但是请注意以下棘手的问题:
bootstrap.yml
,则它们的优先级将比几乎所有其他属性源(包括application.yml)低。如上所述这里。让我们弄清楚,有两种与之相关的属性bootstrap.yml
:
bootstrap.yml
用来查找属性持有者(文件系统,git存储库或其他东西),并且通过这种方式获得的属性具有较高的优先级,因此它们不能被本地配置覆盖。如上所述这里。bootstrap.yml
。如前所述,它们将获得较低的优先级。使用它们来设置默认值可能是一个好主意。因此,在Spring Boot 上application.yml
或bootstrap.yml
在Spring Boot 上放置属性之间的区别是:
bootstrap.yml
。application.yml
更高优先级。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
因此,可以将与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
bootstrap.yml
据我所见,具体到[spring-cloud-config
](cloud.spring.io/spring-cloud-config/…)),它是用来找到正确配置的配置。因此,配置可能在application.properties/yaml之前加载