我刚刚问了Spring Cloud的人,我认为我应该分享我在这里的信息。
Spring Cloud
bootstrap.yml在application.yml之前加载。
bootstrap.yml
application.yml
它通常用于以下情况:
spring.application.name
spring.cloud.config.server.git.uri
encryption/decryption
从技术上讲,bootstrap.yml是由父Spring ApplicationContext加载的。父类ApplicationContext在使用application.yml的父类之前加载。
ApplicationContext
bootstrap.properties
只有当你使用< em > < / em >春云并且你的应用程序的配置存储在远程配置服务器上(例如Spring Cloud Config server)时,它才会被使用/需要。
从文档中可以看到:
Spring Cloud应用程序通过创建“引导”上下文来操作,该上下文是主应用程序的父上下文。它负责从外部源加载配置属性,也可以解密本地外部配置文件中的属性。
注意,bootstrap.yml或bootstrap.properties 可以包含额外的配置(例如默认值),但通常你只需要在这里放置引导配置。
通常它包含两个属性:
spring.cloud.config.uri
在启动时,Spring Cloud使用应用程序的名称对配置服务器进行HTTP调用,并检索该应用程序的配置。
application.properties
包含标准应用程序配置——通常是默认配置,因为在引导过程中检索的任何配置都将覆盖这里定义的配置。
引导。Yml用于从服务器获取配置。它可以用于Spring云应用程序,也可以用于其他应用程序。通常是这样的:
spring: application: name: "app-name" cloud: config: uri: ${config.server:http://some-server-where-config-resides}
如果服务器不可达,应用程序甚至可能无法进一步进行。但是,如果本地存在与概要文件匹配的配置,则服务器配置将被覆盖。
好的方法:
维护一个单独的配置文件本地和运行应用程序使用不同的配置文件。
这只是我的两毛钱。
引导。yml或Bootstrap。properties用于从Spring Cloud Server获取配置。
例如,在My Bootstrap中。我有以下配置文件
spring.application.name=Calculation-service spring.cloud.config.uri=http://localhost:8888
在启动应用程序时,它试图通过连接到http://localhost:8888来获取服务的配置,并查看Calculation-service。Spring Cloud Config服务器中显示的属性
您可以在启动compute - service时从它的日志中验证相同的内容
INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
以下内容摘自这本书,总学分 因为这个答案要交给这本书的作者,即Munish 昌德尔< / em > < /强> < / p >
application.yml / application.properties文件是特定于Spring Boot应用程序的。除非你改变了应用程序的外部属性的位置,否则spring引导将始终从以下位置加载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是特定于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 Config Server进行HTTP(S)调用,并检索该应用程序的配置。
应用程序。Yml包含微服务的默认配置,在引导过程中检索的任何配置(从云配置服务器)将覆盖application.yml中定义的配置
嗯,我完全同意关于这一点已经存在的答案:
实际上,它也能够像application.yml一样存储普通属性。但请注意这个棘手的问题:
让我们明确一点,有两种与bootstrap.yml相关的属性:
因此,在spring引导中将属性放在application.yml或bootstrap.yml上的区别是:
bootstrap.yml的另一个用途是从kubernetes的configmap和秘密资源中加载配置。应用程序必须导入spring-cloud-starter-kubernetes依赖项。
与Spring Cloud配置一样,这必须在引导阶段进行。
从文档中可以看出:
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
引导。当你使用Spring Cloud并且你的应用程序的配置存储在远程配置服务器(例如Spring Cloud Config server)时,yml被使用。引导。Yml在application.yml之前加载