首页 > 解决方案 > 有效范围的 YAML 配置

问题描述

我有一个 YAML 文件,其中包含我的应用程序的一些配置。现在,一些配置需要及时更改。例如:

2020 年的价值观是:

tax:
    federal: 9
    provincial: 7

但对于 2021 年,我们需要的是:

tax:
    federal: 9.5
    provincial: 7.5

如果我只能通过时间切换 yml 文件会很容易,但是 yaml 文件包含许多会在不同时间点更改的配置。另外,我只分配了 1 个 yml 文件来配置我的应用程序,所以这不是一个真正的选择。

所以我的问题是,使用 YAML 表示这一点的最简洁的方法是什么?

我能想到的唯一方法是以下,但我可以看到这非常混乱。

tax:
    federal: [20200101-20201231]9;[20210101-20211231]9.5
    provincial:  [20200101-20201231]7;[20210101-20211231]7.5;

标签: configurationyamlproperties-file

解决方案


您的语法是非法的,您需要将其括在引号中,将其解析为单个标量,然后对其进行后处理。

我建议使用 YAML 的标签系统:您使用标签!datedep来标记值,例如:

tax:
    federal: !datedep { [20200101, 20210101, 20220101]: [9, 7.5] }
    provincial: !datedep { [20200101, 20210101, 20220101]: [7, 7.5] }

我将带有单个键值对的 YAML 映射作为值。关键是日期列表,建立其间的范围。该值是应映射到日期之间范围的值列表。

加载 YAML 时,您必须为 tag 提供构造函数!datedep。这如何工作取决于您的实施。构造函数应根据当前日期选择适当的值。您可以使用 YAML 锚点和别名来引用重复的日期范围,例如:

tax:
    federal: !datedep { &y2021 [20200101, 20210101, 20220101]: [9, 7.5] }
    provincial: !datedep { *y2021 : [7, 7.5] }

推荐阅读