zoukankan      html  css  js  c++  java
  • Spring Cloud配置文件加载优先级简述

        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.配置项的覆盖配置

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

    spring.cloud.config.allowOverride=true

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

  • 相关阅读:
    Java中XML的四种解析方式(二)
    Java中XML的四种解析方式(一)
    Java反射机制
    创建线程的三种方式(Thread、Runnable、Callable)
    GBK和UTF-8的区别
    selenium的其他方法
    selenium
    XPath
    mysqldump / MySQL 备份与恢复语句
    MySQL 增删改查语句/SELECT INSET INTO UPDATE
  • 原文地址:https://www.cnblogs.com/Mr-Rocker/p/10690304.html
Copyright © 2011-2022 走看看