Spring Cloud Tencent 是腾讯开源的一站式微服务解决方案。SCT实现了Spring Cloud 标准微服务 SPI,开发者可以基于 Spring Cloud Tencent 快速开发 Spring Cloud 云原生分布式应用。
Spring Cloud Tencent 的核心依托腾讯开源的一站式服务发现与治理平台 Polaris,实现各种分布式微服务场景。
https://github.com/Tencent/spring-cloud-tencent
spring-cloud-tencent:1.6.0-Hoxton.SR12-SNAPSHOT
Spring Cloud:Hoxton.SR12
Spring Framework:5.2.22.RELEASE
【Polaris Config 模块属性】
定义 Polaris Config 工程的配置属性,前缀为:spring.cloud.polaris.config.*
属性 | 备注 | 默认值 |
---|---|---|
enabled | 是否开启 Polaris Config | true |
address | Polaris Config 服务器地址 | |
port | Polaris Config 服务器端口 | 8093 |
auto-refresh | 是否在更新配置文件时自动更新到 Spring 上下文。 | true |
groups | 导入的配置文件列表 | |
connect-remote-server | 是否连接到远程服务器,适合本地开发模式。 | true |
【Polaris Config 模块启动类】
spring.actories 指定开启 Spring Boot 自动配置类全路径。
PolarisConfigBootstrapAutoConfiguration.java
Spring Cloud 引导阶段自动配置类。
1、配置类注解、不使用 proxy bean 代理
2、判断是否满足启用条件:"spring.cloud.polaris.enabled"。
3、判断是否满足启用条件:"spring.cloud.polaris.config.enabled"。
4、引入自动配置 PolarisSDKContex: PolarisContextAutoConfiguration.java
5、注入自定义实例加入到 IOC 交由 Spring 进行管理。
PolarisConfigAutoConfiguration.java
SpringBoot 应用上下文初始化阶段自动配置类。
1、配置类注解、不使用 proxy bean 代理
2、判断是否满足启用条件:"spring.cloud.polaris.enabled"。
3、判断是否满足启用条件:"spring.cloud.polaris.config.enabled"。
4、注入自定义实例加入到 IOC 交由 Spring 进行管理。
【Polaris Config 基础配置】
ConfigFileGroup.java
配置文件组类,包含分组名称与其包含的配置文件列表。
PolarisConfigProperties.java
Polaris Config 引导配置文件类,读取配置前缀为 "spring.cloud.polaris.config" 的 key。
ConfigFileFormat.java
配置文件格式定义。
【Polaris Config 适配器】
PolarisPropertySource.java
Polaris Config 文件将被包装 Polaris 属性源。
PolarisPropertySourceManager.java
Polaris 属性源管理器。
1、线程安全、分段锁、并发效率高:polarisPropertySources = new ConcurrentHashMap<>()
2、如果已经存在key,则不添加;否则添加进Map:putIfAbsent(polarisPropertySource.getPropertySourceName(),polarisPropertySource);
3、返回所有来源的 Polaris 属性源列表。
PolarisConfigFileLocator.java
1、实现 Spring Cloud 的配置文件扩展 SPI:PropertySourceLocator 接口类。
2、定义默认文件名称,以及引入 Polaris 相关配置完成初始化。
3、重写 locate 方法
PolarisPropertySourceAutoRefresher.java
1、实现 ApplicationListener、ApplicatioContextAware 接口
2、初始化引入 Polaris 相关配置
3、注册 Polaris 配置发布事件
【PolarisConfig 模块监听】
ConfigChangeListener.java
配置更新接口类,提供监听更新方法。
ConfigChangeEvent.java
配置更新事件类,存储所有修改 key 集合,以及所有需要监听的 key 集合。
PolarisConfigListenerContext.java
配置监听上下文类
1、属性定义,任务执行服务、监听器集合、需要监听的 key 以及 key 前缀集合、配置缓存对象。
2、初始化任务执行服务。创建一个线程池,并注册一个服务关闭线程到 JVM shutdown Hook 里。
3、初始化配置缓存对象。
4、合并配置对象方法。(入参与配置缓存合并)
5、添加监听实例
6、根据更新 key 集合筛选符合条件的监听器,并在线程池中调用监听器的更新方法。
7、检查监听器是否满足更新 key 集合。
8、返回所有感兴趣的 key 集合。
PolarisConfigChangeEventListener.java
Polaris 配置更新事件监听类,实现了 ApplicationListener 接口类。
1、从应用上下文的环境变量中获取 PropertySources,解析后合并返回键值对集合。
2、重写应用事件接口
【Polaris Config 模块注解】
PolarisConfigKVFileChangeListener.java
Polaris Config 更新事件监听注解。
1、设置需要监听的 key 数组,未设置则监听所有。
2、设置需要监听的 key 前缀数组,未设置则监听所有。
PolarisConfigAnnotationProcessor.java
Polaris Config 更新事件监听注解处理器。
1、实现 BeanPostProcessor 接口,重写 Bean 初始化回调接口。
2、自定义方法
ConfigurationModifier.java
从 SpringCloud的配置文件中读取配置并覆盖 polaris.yaml
一年已经过去大半,是时候定一个小目标:阅读学习优秀的开源项目源代码。
本文是 Spring Cloud Tencent 第五篇文章,希望今年能完成整个 SCT 源代码的阅读与学习。