我是靠谱客的博主 壮观西牛,最近开发中收集的这篇文章主要介绍Spring Cloud-Config扩展原理与自定义目标config扩展点spring-cloud-config扩展实现自定义config扩展,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

目标

config扩展点

制定了config获取流程,通过PropertySourceLocator bean进行扩展。

spring-cloud-config扩展实现

自定义config扩展

添加配置文件

添加配置

自定义PropertySourceLocator


目标

通过源码简述Spring Cloud提供的config扩展的原理,spring-cloud-config-client如何实现扩展,如何自定义config扩展。

config扩展点

制定了config获取流程,通过PropertySourceLocator bean进行扩展。

spring-cloud-context-xxxx.jar!/META-INF/

org.springframework.cloud.bootstrap.BootstrapConfiguration=
org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration
@Configuration
@EnableConfigurationProperties(PropertySourceBootstrapProperties.class)
public class PropertySourceBootstrapConfiguration implements
		ApplicationContextInitializer<ConfigurableApplicationContext>, Ordered{}
org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration#initialize

遍历PropertySourceLocator beans

生成的propertySource存储于

org.springframework.core.env.AbstractEnvironment#propertySources

org.springframework.core.env.MutablePropertySources#propertySourceList 写拷贝List

这里列举下该field的使用

env提供获取属性的接口

//解析器
org.springframework.core.env.AbstractEnvironment#propertyResolver

//优先读取list中靠前source的属性
org.springframework.core.env.PropertySourcesPropertyResolver#getProperty 

org.springframework.core.env.AbstractEnvironment#getRequiredProperty

org.springframework.core.env.AbstractEnvironment#getProperty

ConfigurationProperties数据赋值

// 存储,来自env
org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor#propertySources
   
// BeanPostProcessor扩展点
org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor#postProcessBeforeInitialization

// 属性绑定
org.springframework.boot.bind.PropertiesConfigurationFactory#bindPropertiesToTarget

// 绑定
org.springframework.validation.DataBinder#bind

// 验证
org.springframework.validation.DataBinder#validate

 

 

spring-cloud-config扩展实现

spring-cloud-config-client-xxxxx.jar!/META-INF/spring.factories

org.springframework.cloud.bootstrap.BootstrapConfiguration=
org.springframework.cloud.config.client.ConfigServiceBootstrapConfiguration

其中通过@Bean提供了PropertySourceLocator的实现 

    org.springframework.cloud.config.client.ConfigServiceBootstrapConfiguration
	
    // 提供ConfigServicePropertySourceLocator bean
	@Bean
	@ConditionalOnMissingBean(ConfigServicePropertySourceLocator.class)
	@ConditionalOnProperty(value = "spring.cloud.config.enabled", matchIfMissing = true)
	public ConfigServicePropertySourceLocator configServicePropertySource(xx){xxx}

其locate实现, 从configserver获取配置数据。

org.springframework.cloud.config.client.ConfigServicePropertySourceLocator#locate

// 聚合propertySource,其中使用linkedHashSet存储了多个source,可以利用linkedHashSet的sorted特性实现k/v优先级目标
org.springframework.core.env.CompositePropertySource 

// 从map中读取k/v属性,可作为CompositePropertySource内部存储的类型
org.springframework.core.env.MapPropertySource 

// 代表k/v属性对的数据源抽象
org.springframework.core.env.PropertySource 

//提供可枚举k/v属性对的抽象能力
org.springframework.core.env.EnumerablePropertySource 

 

 

自定义config扩展

添加配置文件

resources中添加META-INF/spring.factories

添加配置

org.springframework.cloud.bootstrap.BootstrapConfiguration=
packagePath.xxxxBootstrapConfiguration
自定义xxxxBootstrapConfiguration,模仿ConfigServiceBootstrapConfiguration

  • 类上@Configuration @EnableConfigurationProperties
  • 定义生成PropertySourceLocator的方法

        @Bean
        @条件

自定义PropertySourceLocator

public class XxxxSourceLocator implements PropertySourceLocator

 

 

 

最后

以上就是壮观西牛为你收集整理的Spring Cloud-Config扩展原理与自定义目标config扩展点spring-cloud-config扩展实现自定义config扩展的全部内容,希望文章能够帮你解决Spring Cloud-Config扩展原理与自定义目标config扩展点spring-cloud-config扩展实现自定义config扩展所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部