文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

关于SpringCloud本地属性覆盖的问题

2024-04-02 19:55

关注

Spring Cloud 本地属性覆盖

注:使用版本版本 spring cloud F SR2

当前在项目中使用了Spring cloud 配置中心模式,使用spring.cloud.config.server.overrides对一些公共配置进行下发,比如kafka bus 的server 配置等等,但是在一些特殊情况下需要本地使用其他的kafka配置,所以就有了配置上的冲突。但是远程配置的优先级默认高于本地配置。

优先级如下

所以 本地kafka配置不能生效了。

官方给出了解决方案如下

2.4 Overriding the Values of Remote Properties
The property sources that are added to your application by the bootstrap context are often “remote” (from example, from Spring Cloud Config Server). By default, they cannot be overridden locally. If you want to let your applications override the remote properties with their own System properties or config files, the remote property source has to grant it permission by setting spring.cloud.config.allowOverride=true (it does not work to set this locally). Once that flag is set, two finer-grained settings control the location of the remote properties in relation to system properties and the application’s local configuration:
spring.cloud.config.overrideNone=true: Override from any local property source.
spring.cloud.config.overrideSystemProperties=false: Only system properties, command line arguments, and environment variables (but not the local config files) should override the remote settings.

也就是说

如果想要远程配置优先级高,那么allowOverride设置为false,如果想要本地配置优先级高那么allowOverride设置为true

spring.cloud.config.allowOverride=true

overrideNone为true时本地配置优先级高,包括系统环境变量、本地配置文件等等

spring.cloud.config.overrideNone=true

只有系统环境变量或者系统属性才能覆盖远程配置文件的配置,本地配置文件中配置优先级低于远程配置

spring.cloud.config.overrideSystemProperties=false

看起来很美好,配置下就可以了,但真正配置的时候要注意配置的位置,否则配置加载就会变的很混乱了。

一般配置有三个地方

因为本地优先级低于远程配置,所以建议配置spring.cloud.config.overrideNone=true 在远程git properties中即可。

但是这样配置也会有一点点小坑,因为会默认本地有的配置就会优先采用,比如kafka的本地默认配置

"kafkaBinderDefaultProperties": {
       "spring.kafka.consumer.valueDeserializer": "org.apache.kafka.common.serialization.ByteArrayDeserializer",
       "spring.kafka.producer.keySerializer": "org.apache.kafka.common.serialization.ByteArraySerializer",
       "spring.kafka.consumer.keyDeserializer": "org.apache.kafka.common.serialization.ByteArrayDeserializer",
       "logging.level.kafka.server.KafkaConfig": "ERROR",
       "logging.level.org.I0Itec.zkclient": "ERROR",
       "spring.kafka.producer.valueSerializer": "org.apache.kafka.common.serialization.ByteArraySerializer",
       "logging.level.kafka.admin.AdminClient.AdminConfig": "ERROR"
   }

如果我们想配置kafka序列化的模式比如在远程配置成key string 那就不会生效了,所以在使用的时候要注意类型即可。

总结下:所以,如果想在项目中覆盖远程配置,在远程配置中添加spring.cloud.config.overrideNone=true 即可,千万不要加在本地bootstrap.properties那样会无效的。

Spring Cloud Config本地配置覆盖远程配置

Spring Cloud Config 配置的优先级

远程配置 > 本地配置 > java代码配置

当需要本地配置优先时,可以限制远程配置的优先级

配置

spring:
  cloud:
    config:
      allow-override: true
      override-none: true
      override-system-properties: false

参数解释

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯