Spring Cloud配置文件加载简述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/icarusliu/article/details/85335417

Spring Cloud中配置文件的加载机制与其它的Spring Boot应用存在不一样的地方;如它引入了bootstrap.properties的配置文件,同时也支持从配置中心中加载配置文件等;本文主要聚焦在这些配置文件加载的优先级及覆盖关系的控制上,对于帮助理解Spring Cloud的配置文件加载方式有一定的帮助。

1. bootstrap上下文

Spring中加载的配置文件是分层级的;

Spring Cloud启动的时候会创建一个bootstrap的上下文,它是应用的父级上下文(请注意这里所说的bootstrap指的是是启动最开始时加载的配置项,与bootstrap.yml或者说bootstrap.properties是两码事,这点很容易混淆);它负责从一些外部环境中加载配置项,如配置中心;这部分配置项的优先级是最高的,因此它不会被其它的配置文件中加载的配置项给覆盖。

bootstrap的上下文使用另外一种机制来加载额外的配置文件,相对于从application.properties(或者yml)中加载配置文件中加载配置项,你也可以选择从bootstrap.properties(yml)中加载,以区分boostrap上下文中加载的配置项和主上下文加载的配置项。

可以在系统配置项或者启动命令参数中指定不使用bootstrap机制加载配置项:

spring.cloud.bootstrap.enabled=false	

2. 配置项加载位置

Spring Cloud应用加载的配置项可以来自于以下几个位置:

  • 启动命令中指定的配置项;
  • 操作系统配置项;
  • 环境变量
  • 配置中心中的配置文件;
  • 本地的application.properties(yml)
  • 本地boostrap.properties(yml)

这几个位置的配置项从上往下优先级递减,即从上面位置加载的配置项会覆盖下面位置加载的配置项。如application.properties中加载的配置项优先级要高于bootstrap.properties中加载的配置项

3. 指定配置文件或位置

可以通过以下命令来指定bootstrap配置文件的文件名或者位置:

spring.cloud.bootstrap.name=bootstrap-local
spring.cloud.bootstrap.location=...

4. 配置项的覆盖配置

默认情况下,从Spring Cloud Config中加载的配置项,是不能被本地的配置项覆盖的,如果想要覆盖这些配置项,需要在配置中心的配置文件中(或者系统配置项、命令行配置项中等)添加以下配置项(注意本地配置文件中增加该配置无任何意义):

spring.cloud.config.allowOverride=true

另外还可以通过以下命令来控制哪个位置加载的配置项可以覆盖配置中心中的配置项:

spring.cloud.config.overrideNone=true
spring.cloud.config.overrideSystemProperties=false

第一项表示本地的配置文件(如bootstrap.yml或者application.yml)中的配置项可以覆盖远程的配置项,默认是false;

第二项表示是否覆盖系统配置(及命令行、环境变量)中的配置项,默认是True,因此默认情况下这些位置的配置项会覆盖远程的配置项。

猜你喜欢

转载自blog.csdn.net/icarusliu/article/details/85335417
今日推荐