欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Spring Cloud 本地屬性覆蓋的問題

 更新時間:2022年03月01日 15:29:29   作者:架構(gòu)核心技術(shù)  
這篇文章主要介紹了關(guān)于Spring Cloud 本地屬性覆蓋的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Spring Cloud 本地屬性覆蓋

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

當(dāng)前在項(xiàng)目中使用了Spring cloud 配置中心模式,使用spring.cloud.config.server.overrides對一些公共配置進(jìn)行下發(fā),比如kafka bus 的server 配置等等,但是在一些特殊情況下需要本地使用其他的kafka配置,所以就有了配置上的沖突。但是遠(yuǎn)程配置的優(yōu)先級默認(rèn)高于本地配置。

優(yōu)先級如下

  • 1.命令行參數(shù)
  • 2.java:comp/env 里的 JNDI 屬性
  • 3.JVM 系統(tǒng)屬性
  • 4.操作系統(tǒng)環(huán)境變量
  • 5.RandomValuePropertySource 屬性類生成的 random.* 屬性
  • 6.應(yīng)用以外的 application.properties(或 yml)文件
  • 7.打包在應(yīng)用內(nèi)的 application.properties(或 yml)文件
  • 8.在應(yīng)用 @Configuration 配置類中,用 @PropertySource 注解聲明的屬性文件
  • 9.SpringApplication.setDefaultProperties 聲明的默認(rèn)屬性

所以 本地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.

也就是說

如果想要遠(yuǎn)程配置優(yōu)先級高,那么allowOverride設(shè)置為false,如果想要本地配置優(yōu)先級高那么allowOverride設(shè)置為true

spring.cloud.config.allowOverride=true

overrideNone為true時本地配置優(yōu)先級高,包括系統(tǒng)環(huán)境變量、本地配置文件等等

spring.cloud.config.overrideNone=true

只有系統(tǒng)環(huán)境變量或者系統(tǒng)屬性才能覆蓋遠(yuǎn)程配置文件的配置,本地配置文件中配置優(yōu)先級低于遠(yuǎn)程配置

spring.cloud.config.overrideSystemProperties=false

看起來很美好,配置下就可以了,但真正配置的時候要注意配置的位置,否則配置加載就會變的很混亂了。

一般配置有三個地方

  • 本地配置
  • 遠(yuǎn)程 properties
  • config server 下發(fā)配置

因?yàn)楸镜貎?yōu)先級低于遠(yuǎn)程配置,所以建議配置spring.cloud.config.overrideNone=true 在遠(yuǎn)程git properties中即可。

但是這樣配置也會有一點(diǎn)點(diǎn)小坑,因?yàn)闀J(rèn)本地有的配置就會優(yōu)先采用,比如kafka的本地默認(rèn)配置

"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序列化的模式比如在遠(yuǎn)程配置成key string 那就不會生效了,所以在使用的時候要注意類型即可。

總結(jié)下:所以,如果想在項(xiàng)目中覆蓋遠(yuǎn)程配置,在遠(yuǎn)程配置中添加spring.cloud.config.overrideNone=true 即可,千萬不要加在本地bootstrap.properties那樣會無效的。

Spring Cloud Config本地配置覆蓋遠(yuǎn)程配置

Spring Cloud Config 配置的優(yōu)先級

遠(yuǎn)程配置 > 本地配置 > java代碼配置

當(dāng)需要本地配置優(yōu)先時,可以限制遠(yuǎn)程配置的優(yōu)先級

配置

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

參數(shù)解釋

  • allow-override:決定override-system-properties是否啟用,默認(rèn)為true,false=禁用用戶的配置
  • override-system-properties:用來標(biāo)識外部配置是否能夠覆蓋系統(tǒng)屬性,默認(rèn)為true;
  • override-none:當(dāng)allow-override和override-none同時為true,遠(yuǎn)程配置的優(yōu)先級降低,不能覆蓋其他配置;

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論