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日

相关文章

  • 如何基于js及java分析并封装排序算法

    当前前端开发中,排序算法是比较基础的内容,经常会在算法学习和面试中出现。本文将介绍如何基于js及java分析并封装排序算法,为学习和使用排序算法提供帮助。 1. 排序算法介绍 在计算机科学中,排序算法是一种将一串数据按照指定的顺序进行排列的方法。常见的排序算法包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序等等。 2. 分析与封装 要实现排序算…

    Java 2023年5月19日
    00
  • Java 和 Javascript 的 Date 与 .Net 的 DateTime 之间的相互转换

    Java 和 JavaScript 中的 Date 类型是指表示日期和时间的数据类型,而 .NET 中的 DateTime 类型也是类似的类型。由于这些日期时间类型在不同的语言或框架之间存在差异,因此需要了解如何将它们之间相互转换。 1. Java/JavaScript中的Date类型转.NET的DateTime 在Java/JavaScript中获取当前时…

    Java 2023年5月20日
    00
  • java实现希尔排序算法

    下面我就详细讲解一下“Java实现希尔排序算法”的攻略。 什么是希尔排序 希尔排序是插入排序的一种高效实现,也称为缩小增量排序。其基本思路是将待排序的元素分为若干组,对每组元素使用插入排序算法进行排序。然后逐渐减少元素分组的间隔,重复上述过程,直到元素之间间隔为1,获得最终的排序结果。 实现希尔排序的Java代码 下面是一个基于Java的希尔排序算法实现: …

    Java 2023年5月26日
    00
  • java通过MySQL驱动拦截器实现执行sql耗时计算

    首先让我解释一下MySQL驱动拦截器。MySQL驱动拦截器是通过JDBC驱动程序提供的一种扩展机制,以拦截JDBC API调用,从而可以在执行JDBC操作之前和之后添加自定义逻辑。使用MySQL驱动拦截器,我们可以实现一些非常有用的功能,例如,计算SQL执行时间、SQL量级统计、检测SQL注入等。 接下来,我将详细描述如何使用Java和MySQL驱动拦截器来…

    Java 2023年5月20日
    00
  • java8 LocalDate 使用详解

    Java8 LocalDate 使用详解 什么是LocalDate LocalDate是Java8中用于处理日期的类,它能表示一个ISO-8601标准的日期(如2019-03-29)。相比于Java中旧的日期类(如Date和Calendar)而言,LocalDate有着更好的易用性、更加清晰的语义和更强大的功能。 基本用法 创建LocalDate 使用静态方…

    Java 2023年5月20日
    00
  • SpringBoot中使用redis做分布式锁的方法

    SpringBoot是一个基于Spring框架的快速开发脚手架,提供了很多方便的开箱即用的特性,其中通过使用redis做分布式锁来解决并发问题也是常用的一种方式。下面是详细讲解“SpringBoot中使用redis做分布式锁的方法”的完整攻略。 一、使用redis实现分布式锁的原理 分布式锁是指在分布式的环境下,多个进程、线程协同合作访问共享资源的过程中,使…

    Java 2023年5月20日
    00
  • Java参数传递及值传递实现原理详解

    Java参数传递及值传递实现原理详解 Java中的参数传递涉及到两个概念:引用传递和值传递。本文将详细讲解Java参数传递及值传递的实现原理。 引用传递 引用传递是指将实参的地址作为形参传递。在Java中,在方法调用时,如果参数是对象类型,那么实参传递给形参的是对象地址的副本。也就是说,实参和形参指向同一块内存地址。 示例: public class Per…

    Java 2023年5月26日
    00
  • 用python将pdf转化为有声读物

    将PDF转化为有声读物的过程需要使用 Python 中的两个主要库:1. PyPDF2: 用于解析 PDF 文件。2. pyttsx3: 文字转语音库 – 与文本转语音有关。 下面是一个步骤示例,如何在Python中使用PyPDF2和pyttsx3将PDF文档转换为有声读物: 步骤 1 – 安装 PyPDF2 和 pyttsx3 库 在命令提示符中输入以下命…

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