Spring Cloud Config 配置读取优先级过程详解
Spring Cloud Config 是 Spring Cloud 生态系统中非常重要的一个子项目。其提供了一种分布式系统中的外部化配置解决方案,让应用程序的配置信息统一存储在一个中心化的配置中心,并且实现了配置的版本管理和追踪,为更好地进行微服务治理提供了基础支持。
在使用 Spring Cloud Config 进行配置集中化管理时,我们还需要清楚 Spring Cloud Config 的配置读取优先级顺序,这是我们保证系统正确读取到配置信息的保障。
配置读取优先级顺序
Spring Cloud Config 的配置读取优先级顺序如下:
- 应用程序本地配置
- 配置服务端的配置
- git 仓库中的配置
优先级顺序解释
应用程序本地配置
这里的应用程序本地配置指的是应用程序中的 bootstrap.yml
(或者 bootstrap.properties
)和 application.yml
(或者 application.properties
)文件中的配置。这部分配置优先级最高,如果配置了相同的属性,它会覆盖配置服务端和 git 仓库中的相同属性。
配置服务端的配置
配置服务端可以使用以下方式进行配置:
application.yml
(或者application.properties
)配置文件;- 通过环境变量来配置;
- 通过命令行参数来配置。
这部分配置优先级仅次于应用程序本地配置,如果配置了相同的属性,它会覆盖 git 仓库中的相同属性。
Git 仓库中的配置
Git 仓库中的配置和服务端的配置一样也是通过配置文件、环境变量和命令行参数来进行配置。但是,由于 Git 仓库中的配置是分布式的,它的优先级最低,如果配置了相同的属性,它会被本地配置和服务端的配置所覆盖。
示例1
我们可以通过一个示例来更好地理解配置读取的优先级顺序。
假设我们有以下配置:
应用程序 bootstrap.yml
spring:
application:
name: config-server
cloud:
config:
uri: http://localhost:8888
label: master
profile: dev
配置服务端的 application.yml
my:
config:
server:
port: 9090
git:
uri: https://github.com/spring-cloud-samples/config-repo.git
search-paths: '{profile}'
Git 仓库中的配置 application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: root
在这个示例中,应用程序的 bootstrap.yml
文件中指定了配置服务端地址和应用程序名称,以及使用 dev 配置文件进行配置,同时也指定要在 Git 仓库的 master 分支中查找配置文件。
配置服务端的 application.yml
中指定了配置服务端的端口和 Git 仓库的访问地址以及查找路径。
最后,在 Git 仓库中的配置文件中定义了数据库的 DataSource 配置信息。
根据上述的优先级顺序,最终读取的配置信息为:
spring:
application:
name: config-server
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: root
示例2
我们再来看一组示例,假设我们有以下配置:
应用程序本地配置 application.yml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: root
配置服务端的 application.yml
my:
config:
server:
port: 9090
git:
uri: https://github.com/spring-cloud-samples/config-repo.git
search-paths: '{profile}'
Git 仓库中的配置 application.yml
server:
port: 80
在这个示例中,应用程序本地配置中定义了服务器端口和数据库的 DataSource 配置。
配置服务端中定义了配置服务端端口和 Git 仓库的访问路径。
在 Git 仓库中的配置中仅定义了服务器端口。
根据上述的优先级顺序,最终读取的配置信息为:
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: root
在这个示例中,应用程序本地配置具有最高的优先级,因此它的端口配置会覆盖配置服务端和 Git 仓库中的端口配置。
而在 Git 仓库中的配置中,除了服务器端口外,没有其他配置信息,因此它会被应用程序本地配置和配置服务端的配置所覆盖。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springcloud config配置读取优先级过程详解 - Python技术站