载入外部配置数据
tiny3 Example
在本节中,通过引入 hedzr/cmdr-loaders,将会采用一个较为冗长的示例程序来展示如何逐步地整合配置管理并加载外部配置文件的能力。
下面的示例程序是一个较为冗长的版本,
在 hedzr/cmdr-tests
的根目录中包含一个名为 tiny3-app.toml
的配置数据文件:
它将被 tiny3 在执行时装入。我们可以借助于 --full
打印的配置数据树观察到这个功能是正常工作的:
注意到高亮行显示了 app.tiny3.foo
的键值被正确加载了。
自动搜索配置文件夹
hedzr/cmdr-loaders 提供符合 GNU Folder Spec, UNIX Filesystem Conventions (wiki) 以及 Filesystem Hierarchy Standard (wiki)。
因此,cmdr & cmdr-loaders 将会自动搜索诸如
Primary
:/etc/<app-name>
Secondary
:$HOME/.config/<app-name>
Alternative(s)
:.
and<exeutable-dir>
这些文件夹来查找 <app-name>.toml
是否存在。
如果找到了(例如本例中的 tiny3-app.toml
),那就载入其中的数据集。
然后,如果这是 Primary
和 Secondary
配置集,那就检查该文件夹中是否有 conf.d
子文件夹,
如果有,自动装载这个子文件夹中的全部配置文件。
hedzr/cmdr-loaders
识别多种文件名后缀并正确装载它们,包括:
- .toml
- .yaml, .yml
- .json
- .hjson
- .hcl
- .nestedtext, .txt, .conf
你甚至可以同时混用它们。
自动回写变更集合
对于 Alternative
配置集,我们还支持自动回写的功能:当应用程序结束时,自动将内存中的配置数据集的变更条目写入到 Alternative 配置文件中。
默认地,仅有当前工作目录中的 <app-name>.{toml,yaml,...}
才属于 Alternative
配置集,它才支持自动回写功能。
注意:<exeutable-dir>
的 Alternative 配置文件不支持回写功能。
自动环境变量绑定
当使用 local.NewEnvVarLoader()
这个 loader 时,它将会处理自动环境变量到命令行选项参数的绑定。
所谓自动环境变量,是指 APP_xxx
这样的环境变量名字。
如果自动绑定功能启用,那么像 APP_JUMP_FULL=1
这样的环境变量值会被
赋予 jump
命令的 full
参数选项,从而起到 app jump --full to
这个命令行的等价效果,对应的命令行可以是 APP_JUMP_FULL=1 app jump to
。
那么孰优孰劣呢?这就很难讲了,负责 DevOps 的人或许会有自己的看法。
没有启用时怎么办
通常情况下,你可以为一个参数选项显式地做环境变量绑定,如同这样:
所以你也可以不必启用自动环境变量的绑定能力。
:end:
How is this guide?
Last updated on