springcloud config配置读取优先级过程详解

Spring Cloud Config 配置读取优先级过程详解

Spring Cloud Config 是 Spring Cloud 生态系统中非常重要的一个子项目。其提供了一种分布式系统中的外部化配置解决方案,让应用程序的配置信息统一存储在一个中心化的配置中心,并且实现了配置的版本管理和追踪,为更好地进行微服务治理提供了基础支持。

在使用 Spring Cloud Config 进行配置集中化管理时,我们还需要清楚 Spring Cloud Config 的配置读取优先级顺序,这是我们保证系统正确读取到配置信息的保障。

配置读取优先级顺序

Spring Cloud Config 的配置读取优先级顺序如下:

  1. 应用程序本地配置
  2. 配置服务端的配置
  3. 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技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • HBuilderX配置tomcat外部服务器查看编辑jsp界面的方法详解

    以下是关于“HBuilderX配置Tomcat外部服务器查看编辑JSP界面的方法详解”的具体攻略。 步骤一:安装Tomcat服务器 首先需要在电脑上安装好Tomcat服务器。如果已经安装过Tomcat服务器,则可以跳过此步骤。 步骤二:配置Tomcat的conf文件 在Tomcat服务器的安装目录下,找到conf文件夹,在该文件夹下找到文件server.xm…

    Java 2023年6月15日
    00
  • Java Apache POI报错“InvalidObjectException”的原因与解决办法

    “InvalidObjectException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 对象错误:如果对象不正确,则可能会出现此异常。例如,可能会尝试使用不支持的对象类型。 以下是两个实例: 例1 如果对象不正确,则可以尝试使用正确的对象类型以解决此问题。例如,在Java中,可以使用以下代码: FileInputStrea…

    Java 2023年5月5日
    00
  • java Freemarker页面静态化实例详解

    Java FreeMarker页面静态化实例详解 什么是FreeMarker页面静态化 FreeMarker是一款基于模板技术实现的Java模板引擎,它可以将动态的HTML页面转化成静态的HTML页面,将一个基于模板的数据模型填充到模板中生成完整的HTML页面,并将HTML页面中的占位符等内容替换成相应的数据,将页面的内容动态的生成并输出。FreeMarke…

    Java 2023年6月15日
    00
  • JSP 获取真实IP地址的代码

    JSP 获取真实IP地址的代码攻略如下: 步骤一:获取HttpServletRequest对象 首先,我们需要获取HttpServletRequest对象,因为它包含了对象的许多属性和方法。在JSP中,可以直接使用内置对象request获取HttpServletRequest对象。 <% HttpServletRequest request = (Ht…

    Java 2023年6月15日
    00
  • 没有外网IDEA离线使用maven仓库的方法

    请看以下攻略: 问题背景 在没有外网的情况下,我们在使用 IDEA 进行开发时,如何使用 Maven 的依赖包? 解决方案 1. 下载 Maven 仓库依赖包 在有外网的环境下,打开 IDEA,新建一个空项目,在 pom.xml 文件中添加需要的依赖,然后将项目打包,此时 Maven 会将依赖包下载到本地仓库(默认路径为用户目录下的 .m2 目录)中。将本地…

    Java 2023年5月20日
    00
  • SpringBoot web开发源码深入分析

    SpringBoot Web 开发源码深入分析攻略 SpringBoot是目前非常热门的微服务框架,Web开发是其中的重要组成部分。下面将从源码角度详细讲解SpringBoot Web开发的攻略。 SpringBoot Web框架的核心知识点 SpringBoot Web框架的启动过程 SpringBoot常用注解和配置 SpringBoot Web框架的异…

    Java 2023年5月19日
    00
  • springboot如何添加全局异常捕获类

    下面是关于在SpringBoot中添加全局异常处理类的详细攻略: 1. 首先新建一个全局异常处理类 在SpringBoot中,我们可以通过编写一个全局异常处理类来处理项目中出现的所有异常。在本文中,我们将这个全局异常处理类命名为 GlobalExceptionHandler。 @ControllerAdvice public class GlobalExce…

    Java 2023年5月27日
    00
  • Java中关于String类以及字符串拼接的问题

    String类部分源码 //被final修饰不可被继承 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { //String维护char[] 所以不可修改 private final char value[]; …

    Java 2023年4月27日
    00
合作推广
合作推广
分享本页
返回顶部