Dav*_*itz 11 config environment-variables typesafe
使用typesafe配置,如何使用环境变量覆盖参考配置?例如,假设我有以下配置:
foo: "bar"
Run Code Online (Sandbox Code Playgroud)
我希望它与环境变量一起覆盖(FOO如果存在).
小智 13
如果我正确理解你的问题,答案就在这里.你可以做
foo: "bar"
foo: ${?FOO}
Run Code Online (Sandbox Code Playgroud)
yǝs*_*ǝla 12
官方文档现在对它的描述非常清楚,并为此支持多种选择。这是一个简短的总结......
最常见的方法是使用这种形式:
basedir = "/whatever/whatever"
basedir = ${?FORCED_BASEDIR}
Run Code Online (Sandbox Code Playgroud)
如果设置了 env 变量,那么它将覆盖您的默认值,否则它将保持不变。
更方便的方法是使用 JVM 属性-Dconfig.override_with_env_vars=true来覆盖任何配置变量。在这种情况下,您不必创建重复的声明。您的 env 变量必须以 prefix 命名CONFIG_FORCE_。在文档中查看 env var 到配置名称映射的工作原理。例如:CONFIG_FORCE_a_b__c___d将映射到a.b-c_d.
最后,如果你想推出你自己的 mapping,这类似于上面描述的选项而不使用override_with_env_vars你可以使用一些shell hacking,如下所述。
如果您必须使用环境变量并且它们的命名与配置名称一致,您可以使用像这样的 bash 脚本来自动从您的环境变量转换为 JVM cmd args。这些-DJVM 参数将覆盖类型安全配置值。例子:
# export my_PROP1=1
# export my_PROP2=2
#
# props=$(env | grep my_ | awk '{print "-D"$_}' ORS=' ')
#
# echo "JVM executable command is: java $props some.jar"
JVM executable command is: java -Dmy_PROP2=2 -Dmy_PROP1=1 some.jar
Run Code Online (Sandbox Code Playgroud)
将大写转换为小写,如果它们不直接映射到您的配置值,请随意对环境变量执行子字符串操作。
| 归档时间: |
|
| 查看次数: |
6399 次 |
| 最近记录: |