【问题标题】:YAML configuration frameworkYAML 配置框架
【发布时间】:2024-01-20 22:58:01
【问题描述】:
我有一个应用程序,我们正在使用基于 *.conf 文件的配置框架。每个这样的文件代表一些具有可以被覆盖或与下一层合并的配置的层。此外,还可以使用对当前定义中某些配置定义的引用,基于某些配置模板定义构建自定义配置的能力...
所以实际上有一个带有配置的层的层次结构。
我想知道是否有足够成熟的 YAML 框架可以提供上述能力?请指教。
【问题讨论】:
标签:
configuration
yaml
config
configuration-files
configurationmanager
【解决方案1】:
我确实为应用程序实现了类似的配置系统。
YAML 本身仅将流加载到本机数据结构中。您需要考虑如何定义此数据结构。有几种方法:
- 隐式。这是大多数人在将 YAML 与 Python 或其他动态类型语言一起使用时采用的方式。您将 YAML 文件加载到
dict、list 和原子值(字符串、int 等)的层次结构中。这样做的好处是加载后很容易合并不同文件的内容。
- 明确。这意味着您将要加载文件的数据结构定义为类型。典型的静态类型语言,如 Java 或 Go。这里的主要问题是,如果您有无法使用 YAML 的锚点/别名系统编码的引用(例如,因为您引用了另一个文件中的某些内容),您需要在类型结构中存在可以存在临时引用的位置,以后可以替换为实际值。
- 基于图表。大多数 YAML 实现都提供了一种将 YAML 文件加载到 节点图 中的方法,其中每个节点都是一个序列、一个映射或一个按照 YAML 规范的标量。这样做的好处是您可以在节点图上实现后处理,然后可以将其加载到目标本机结构中。我在 go-yaml (v3) 中使用了这种方法,它很好地支持它。
如果您正在搜索已经实现了大部分您想做的事情,我认为您不会找到任何东西。配置的问题在于,它们通常在它们包含的内容和它们应该被处理的方式上都与应用程序紧密绑定。 YAML 是配置文件的几个共同特征之一,这也是为什么它经常被用于它们的原因,但更复杂的功能往往在很大程度上取决于您的特定要求,因此将它们作为独立框架发布通常没有意义。