配置文件

本系统会调用很多外部的 API 或服务, 这些代码秘钥和参数不能硬编码进入代码中, 因此需要使用配置文件统一管理

文件结构

系统中各个模块都有其可以配置的参数等配置信息, 且由于每个模块具有不同实现,因此每个实现也就有其配置信息。

配置信息内的结构如下所示, 第一层对应的模块,第二层则对应模块不同的实现类型。 值得注意的是, 如果一个模块只有一种实现,也就是说其实现类型为basic, 那么对应的配置信息也为 basic。 但如果该模块存在多种实现, 那么basic即为多种实现的公共配置信息。

TODO: 多个实现类型共享一个配置信息暂时未实现...

具体到每个具体实现的配置信息, 其实际存储的是配置项名称配置项内容的映射集合。 其中配置项名称应该使用小驼峰命名法, 目前每个配置内容项仅支持如上 3 种类型, 而配置项内容目前仅支持 number, stringboolean 这 3 中类型, 因此在设计配置项时应该注意这三种类型在 json 中表现差异。

// 模块配置项
type ModuleItems = Map<str, number | string | boolean>;

interface ConfigInfo {
    name: ModuleConfig;
}

interface ModuleConfig {
    basic: ModuleItems;
    kind?: ModuleItems;
}

生命周期

每个模块在启动前都会重新加载配置信息, 也就是说模块在运行过程中配置信息是不会改变的。

在目前的实现中,每次启动时只会从内存中的副本中进行读取, 而不是本地的内存文件。 但是通过程序修改配置信息之后,系统会将配置信息重新写会。

最后更新于