-
|
我观察到有一些 我查看了 PropertiesCompatibleFileConfigRepository 的实现,这是直接监听 ConfigFile 的变更来实现更新,对于 Properties 类型的配置,有什么特别的吗? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
|
结论: 当前链路大致是:
所以这里的“特别”主要不是 Properties 不兼容,而是 Properties 不需要转换层。 代码上可以参考:
另外,当前注释里提到 |
Beta Was this translation helpful? Give feedback.
结论:
PropertiesCompatibleFileConfigRepository主要是给 YAML/YML 这类“文件内容需要先转换成 Properties”的格式用的,Properties 类型本身已经是 key-valueProperties,所以Config#getProperty读取时应走普通ConfigRepository链路,而不是再绕一层ConfigFile适配。当前链路大致是:
DefaultConfigFactory#create(...)会先通过determineFileFormat(namespace)判断格式。只有ConfigFileFormat.isPropertiesCompatible(format)且format != ConfigFileFormat.Properties时,才会创建PropertiesCompatibleFileConfigRepository。RemoteConfigRepository#getConfig()已经直接把ApolloConfig#getConfigurations()转成Properties,DefaultConfig可以直接消费这份 key-value 数据。PlainTextConfigFile#getContent()读取content字段,再由YamlConfigFile#asProperties()调用YamlParser#yam…