springcloud本地配置优先方式

 更新时间:2024年07月15日 09:08:55   作者:火冰鬼舞  
这篇文章主要介绍了springcloud本地配置优先方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

springcloud本地配置优先

如果我们的项目使用了远程配置中心,就会使用远程配置优先。可在实际开发中,通常我们需要本地的部分配置优先于远程配置,方便开发调试。

spring cloud为我们提供了相关的配置:

使用propertise配置

1.不适用远程配置

默认值是true,不要调整成false, 可以不配置,使用默认即可

# 如果想要远程配置优先级高,那么 allow-override 设置为 false,如果想要本地配置优先级高那么 allow-override 设置为 true
spring.cloud.config.allow-override=true

2.本地文件优先

# 如果本地配置优先级高,那么 override-none 设置为 true,包括系统环境变量、本地配置文件等配置
spring.cloud.config.override-none=true

3.远程配置只覆盖本地配置文件

# 只有系统环境变量或者系统属性才能覆盖远程配置文件的配置,本地配置文件中配置优先级低于远程配置;注意本地配置文件不是系统属性      
spring.cloud.config.override-system-properties=false

2或3任意配置即可,只会生效一种。

使用yml配置同properties一样:

spring:
  cloud:
    config:
      # 如果本地配置优先级高,那么 override-none 设置为 true,包括系统环境变量、本地配置文件等配置
      override-none: true
      # 如果想要远程配置优先级高,那么 allow-override 设置为 false,如果想要本地配置优先级高那么 allow-override 设置为 true
      allow-override: true
      # 只有系统环境变量或者系统属性才能覆盖远程配置文件的配置,本地配置文件中配置优先级低于远程配置;注意本地配置文件不是系统属性
      override-system-properties: false

配置到这里,可能就会去尝试。不过当你配置完成后会发觉,好像配置没有生效。

不要着急,我们继续分析。

上源码:

org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration#insertPropertySources

我们反向看一下:

  • 通过remoteProperties对象的属性判断的
  • remoteProperties的属性是通过spring.cloud.config的键值对复制的
  • 键值对是通过环境变量中incoming获取的
  • incoming是new出来的也就是说没有值
  • incoming的值是通过reversedComposite的的值排序后添每次加头部进去的,也就是和reversedComposite原始的顺序是一致的,propertySources中已有值,需要使用addFirst把远程配置加载到前列,就需要先倒序.
  • 查看composite就知道了,最终的参数是从哪里获取的。

从结果发现,composite中的配置全部是来自与远程配置。

所以如果你需要本地配置优先,需要把上面的配置放在远程配置中的配置文件中才可以生效

同时需要注意文件顺序:

  • {application.name}-{profiles}.后缀
  • {application.name}.后缀
  • {application.name}
  • spring.cloud.nacos.config.shared-configs中的公共配置

快去试一下效果吧!!~~~~~~~~~~~~~~~~~~~~

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 微信公众平台开发实战Java版之微信获取用户基本信息

    微信公众平台开发实战Java版之微信获取用户基本信息

    这篇文章主要介绍了微信公众平台开发实战Java版之微信获取用户基本信息 的相关资料,需要的朋友可以参考下
    2015-12-12
  • Java调用HTTPS接口的两种方式及完整代码

    Java调用HTTPS接口的两种方式及完整代码

    HTTPS是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 ,HTTPS在HTTP的基础下加SSL,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL,本文给大家介绍了Java调用https接口的两种方式及完整代码,需要的朋友可以参考下
    2025-05-05
  • 解决springboot中自定义JavaBean返回的json对象属性名称大写变小写问题

    解决springboot中自定义JavaBean返回的json对象属性名称大写变小写问题

    开发过程中发现查询返回的数据出现自定义的JavaBean的属性值大小写格式出现问题,导致前端无法接受到数据,目前有四种解决方法,根据大佬的经验之谈,前两种是最简单便捷的,后两种是比较通用的方法,需要的朋友可以参考下
    2023-10-10
  • Java编程实现用hash方法切割文件

    Java编程实现用hash方法切割文件

    这篇文章主要介绍了Java编程实现用hash方法切割文件,简单介绍了hash的概念,然后分享了使用方法示例,具有一定借鉴价值,需要的朋友可以了解下。
    2017-12-12
  • Java 深入探究讲解工厂方法模式

    Java 深入探究讲解工厂方法模式

    工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂、具体工厂、抽象产品、具体产品
    2022-04-04
  • IDEA中程序包Org.Springframework.Boot不存在问题及解决

    IDEA中程序包Org.Springframework.Boot不存在问题及解决

    这篇文章主要介绍了IDEA中程序包Org.Springframework.Boot不存在问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java 逻辑控制全面详解

    Java 逻辑控制全面详解

    程序的逻辑主要分为三种结构:顺序结构、分支结构、循环结构,顺序结构的所有的代码都是从前向后执行的。有些时候顺序是由“{}”为界限的,下文将全面详细的介绍
    2021-10-10
  • java中的阻塞队列应用场景及代码实例

    java中的阻塞队列应用场景及代码实例

    这篇文章主要介绍了java中的阻塞队列应用场景及代码实例阻塞队列是一种特殊的队列,它提供了线程安全的操作,并在队列为空或满时提供了阻塞的功能,阻塞队列通常用于多线程场景,其中生产者线程向队列中添加元素,而消费者线程从队列中获取元素,需要的朋友可以参考下
    2024-01-01
  • SpringBoot使用Redis缓存的实现方法

    SpringBoot使用Redis缓存的实现方法

    这篇文章主要介绍了SpringBoot使用Redis缓存的实现方法,需要的朋友可以参考下
    2018-02-02
  • Java Stream 流的使用过程解析

    Java Stream 流的使用过程解析

    这篇文章主要介绍了Java Stream 流的使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论