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中的公共配置

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

总结

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

相关文章

  • MyBatis逆向⼯程的生成过程

    MyBatis逆向⼯程的生成过程

    MyBatis官方为我们提供了一个逆向工程,通过这个逆向工程,只要建立好数据表,那么MyBatis就会根据这个表自动生成pojo类、dao接口、sql映射文件
    2023-02-02
  • springboot自定义拦截器简单使用及举例

    springboot自定义拦截器简单使用及举例

    Spring Boot拦截器是AOP的一种实现,专门拦截对控制层的请求,主要应用于判断用户权限,拦截webSocket请求,下面这篇文章主要给大家介绍了关于springboot自定义拦截器简单使用及举例的相关资料,需要的朋友可以参考下
    2023-01-01
  • IntelliJ IDEA中Project与Module的概念以及区别

    IntelliJ IDEA中Project与Module的概念以及区别

    这篇文章主要给大家介绍了关于IntelliJ IDEA中Project与Module的概念以及区别的相关资料,文中通过实例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 使用SpringBoot+AOP实现可插拔式日志的示例代码

    使用SpringBoot+AOP实现可插拔式日志的示例代码

    这篇文章主要介绍了使用SpringBoot+AOP实现可插拔式日志的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Java try catch语句异常处理详解

    Java try catch语句异常处理详解

    这篇文章主要给大家介绍了关于Java try catch语句异常处理的相关资料,Java中的try-catch用于捕获和处理异常,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • java中out.print和out.write的方法

    java中out.print和out.write的方法

    本文用一个小例子说明java out.print和out.write的方法,大家参考使用吧
    2013-11-11
  • 关于spring boot使用 jdbc+mysql 连接的问题

    关于spring boot使用 jdbc+mysql 连接的问题

    这篇文章主要介绍了spring boot使用 jdbc+mysql 连接,在这里mysql 8.x版本驱动包,要使用 com.mysql.cj.jdbc.Driver作为驱动类,文中给大家详细介绍,需要的朋友可以参考下
    2022-03-03
  • mybatis 如何通过resultMap 返回long

    mybatis 如何通过resultMap 返回long

    这篇文章主要介绍了mybatis 如何通过resultMap 返回long的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringTask实现定时任务方法讲解

    SpringTask实现定时任务方法讲解

    通过重写Schedu lingConfigurer方法实现对定时任务的操作,单次执行、停止、启动三个主要的基本功能,动态的从数据库中获取配置的定时任务cron信息,通过反射的方式灵活定位到具体的类与方法中
    2023-02-02
  • 详解Java中的内存屏障

    详解Java中的内存屏障

    这篇文章主要介绍了Java中的内存屏障的相关资料,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-05-05

最新评论