关于Spring Cloud 本地属性覆盖的问题
作者:架构核心技术 发布时间:2021-09-17 09:26:42
Spring Cloud 本地属性覆盖
注:使用版本版本 spring cloud F SR2
当前在项目中使用了Spring cloud 配置中心模式,使用spring.cloud.config.server.overrides对一些公共配置进行下发,比如kafka bus 的server 配置等等,但是在一些特殊情况下需要本地使用其他的kafka配置,所以就有了配置上的冲突。但是远程配置的优先级默认高于本地配置。
优先级如下
1.命令行参数
2.java:comp/env 里的 JNDI 属性
3.JVM 系统属性
4.操作系统环境变量
5.RandomValuePropertySource 属性类生成的 random.* 属性
6.应用以外的 application.properties(或 yml)文件
7.打包在应用内的 application.properties(或 yml)文件
8.在应用 @Configuration 配置类中,用 @PropertySource 注解声明的属性文件
9.SpringApplication.setDefaultProperties 声明的默认属性
所以 本地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
看起来很美好,配置下就可以了,但真正配置的时候要注意配置的位置,否则配置加载就会变的很混乱了。
一般配置有三个地方
本地配置
远程 properties
config server 下发配置
因为本地优先级低于远程配置,所以建议配置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
参数解释
allow-override
:决定override-system-properties是否启用,默认为true,false=禁用用户的配置override-system-properties
:用来标识外部配置是否能够覆盖系统属性,默认为true;override-none
:当allow-override和override-none同时为true,远程配置的优先级降低,不能覆盖其他配置;
来源:https://blog.csdn.net/luqiang81191293/article/details/83624558
猜你喜欢
- 1. 继承1. 子类继承了父类,获得父类的全部Field和方法。子类Student类继承父类,将可以获得父类的全部Field和方法publi
- 多个线程访问共享对象和数据的方式有两种情况:1、每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享
- 在本系列文章中,我们将使用深度神经网络(DNN)来执行硬币识别。具体来说,我们将训练一个DNN识别图像中的硬币。在本文中,我们将描述一个Op
- 全面解析java注解Java中的常见注解 a.JDK中的注解 @Override 覆盖父类或者父接口的方
- 本文实例为大家分享了java文件读写工具类的具体代码,供大家参考,具体内容如下import java.io.BufferedInputStr
- 很多人的程序在本地运行是好的,但是发布在服务器上后就会有各种各样的问题,但是服务器上又不能直接调试,所以直接读写本地日志成为解决问题的关键,
- 这篇文章主要介绍了mybatis使用pagehelper插件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 一、在spring的应用中我们存在两种过滤的用法,一种是 * 、另外一种当然是过滤器。我们这里介绍过滤器在springboot的用法,在sp
- 一、前言spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是 约定大于配置 ,但是原理呢?为什么要这么做?)
- springboot集成 redispom文件<dependency> <groupId>
- 本文实例为大家分享了SpringBoot整合BCrypt实现密码加密的具体代码,供大家参考,具体内容如下一. 首先在pom依赖中加入依赖:&
- 目录1、需求2、问题2、获取1)导入依赖为了获取客户端类型、操作系统类型、ip、port2)封装获取body字符串的工具类3) * 类4)继
-   利用 springboot + redis 实现过滤重复提交的请求,业务流程如下所示,首先定义一个拦
- 1、二叉搜索树的概念 二叉搜索树又称二叉排序树,它可以是一颗空树,亦可以是一颗具有如下性质的二叉树: &
- android动态布局相比静态布局,动态布局不用再将xml转变了布局代码,提高了一定的效率,当然可以忽略不记。动态布局主要是比较灵活,可以很
- 目录@CachePut设置的key值无法与@CacheValue的值匹配缓存注解key的基本数据类型要求必须要统一Spring-Cache
- 一、解决方案1声明:jdk1.8已经经过线上环境使用1. 调研JDK8的加密策略存在限制版本和无限制版本,随着越来越多的第三方工具只支持 J
- 大部分app打开pdf文件是通过intent调起手机中能打开pdf文件的工具,来查看pdf文件,如果需求是,用户在app内下载好pdf文件后
- 前言春节要到了,看惯了前端各种小游戏,确实做得很好,很精致。但是我也要为后端程序员稍微做一点贡献,做一款java版本的【年兽大作战】。这个游
- 本文章牵涉到的技术点比较多:spring Data JPA、Redis、Spring MVC,Spirng Cache,所以在看这篇文章的时