该文章内容发布已经超过一年,请注意检查文章中内容是否过时。
在应用程序启动的时候会调用发布器的启动方法 ,然后调用初始化方法,在发布器DefaultApplicationDeployer中的初始化方法initialize() 如下:
初始化过程中会先启动配置中心配置信息处理,然后 调用加载初始化应用程序配置方法loadApplicationConfigs();进行配置加载 关于配置的官方文档链接为 配置概述
Dubbo框架的配置项比较繁多,为了更好地管理各种配置,将其按照用途划分为不同的组件,最终所有配置项都会汇聚到URL中,传递给后续处理模块。
常用配置组件如下:
配置还有几个比较重要的点:
配置来源 从Dubbo支持的配置来源说起,默认有6种配置来源:
覆盖关系
下图展示了配置覆盖关系的优先级,从上到下优先级依次降低:
配置方式
配置虽然非常多,但是我们掌握一下配置加载的原理,再了解下官网的文档说明路径应该基础的配置搞定是没问题的,更深入的配置很多参数还是需要了解下源码的.
前面我们在讲ModuleModel对象的创建的时候ModuleModel模型中包含了一个成员变量为ModuleEnvironment 代表当前的模块环境和ModuleConfigManager配置管理器 而ModuleModel模型对象的父模型对象ApplicationModel中包含了一个成员变量Environment环境和ConfigManager配置管理器.
在回顾调用过程之前我们先看下模型,配置管理器和环境与配置之间的关系如下图:
在ModuleModel对象初始化方法initialize()中创建了模块配置管理器:ModuleConfigManager 如下代码所示:
ModuleEnvironment环境信息对象也会在配置管理器创建的时候被调用到: 如下代码所示:
在扩展对象ExtensionLoader进行对象ModuleEnvironment创建之后会对对象进行初始化调用 initExtension(instance)方法 初始化的时候调用如下代码: ExtensionLoader中的初始化方法如下:
这个初始化方法对应ModuleEnvironment的父类型Environment中的初始化方法如下:initialize()
前面我们已经基本上介绍了各个属性的含义下面用一个表格列举一下方便查看:
属性变量名 | 属性类型 | 说明 |
---|---|---|
propertiesConfiguration | PropertiesConfiguration | dubbo.properties文件中的属性 |
systemConfiguration | SystemConfiguration | JVM参数 启动进程时指定的 (-D)配置 |
environmentConfiguration | EnvironmentConfiguration | 环境变量中的配置 |
externalConfiguration | InmemoryConfiguration | 外部配置全局配置 例如配置中心中 config-center global/default config |
appExternalConfiguration | InmemoryConfiguration | 外部的应用配置 例如配置中心中执行的当前应用的配置 config-center app config |
appConfiguration | InmemoryConfiguration | 来自应用中的配置例如:Spring Environment/PropertySources/application.properties |
globalConfiguration | CompositeConfiguration | 前面6个配置属性放到一起就是这个 |
globalConfigurationMaps | List<Map<String, String» | 最前面的6个属性转换为map放到一起就是这个可以理解为将全局配置globalConfiguration转换成了列表 这个列表顺序在这里是:SystemConfiguration -> EnvironmentConfiguration -> AppExternalConfiguration -> ExternalConfiguration -> AppConfiguration -> AbstractConfig -> PropertiesConfiguration |
defaultDynamicGlobalConfiguration | CompositeConfiguration | 这个也是一个组合配置将defaultDynamicConfiguration动态配置(来自配置中心的配置)和全局配置添加到了自己的配置列表中 列表顺序为defaultDynamicConfiguration -> globalConfiguration |
localMigrationRule | String | ,用户在JVM参数或者环境变量中指定的dubbo.migration.file,如果用户未指定测尝试加载类路径下的dubbo-migration.yaml |
关于每个配置信息这里还是来了解下细节,方便大家了解原理.
如前面所示:
下面就直接提构造器的PropertiesConfiguration代码了:
继续看ConfigUtils的getProperties方法:
路径获取之后加载详细的配置内容:
ConfigUtils的loadProperties代码如下:
代码如下:
完整的配置加载流程这里用简单的话描述下:
这里我们继续看SystemConfiguration配置的加载 这个直接看下代码就可以了:
这个类型仅仅是使用System.getProperty来获取JVM配置即可
这里我们来看EnvironmentConfiguration,这里我们直接来看代码:
这里我们看下InmemoryConfiguration的设计,这个直接看代码吧内部使用了一个LinkedHashMap来存储配置
关于配置迁移文件的用法可以看下这个Dubbo官方的地址迁移规则说明
这个配置文件的文件名字为:dubbo-migration.yaml
这个和14.3.4加载JVM参数配置的过程是相似的细节可以看14.3.4节
加载配置涉及到了配置优先级的处理,
下面来看加载配置代码 loadApplicationConfigs()方法
配置管理器加载配置:
原文地址:Dubbo配置加载全解析