使用typesafe配置中的环境变量覆盖配置

时间:2016-07-05 07:17:06

标签: environment-variables config typesafe

使用typesafe config,如何使用环境变量覆盖参考配置?例如,假设我有以下配置:

foo: "bar"

如果存在环境变量FOO,我希望它被覆盖。

3 个答案:

答案 0 :(得分:10)

如果我正确理解了您的问题,答案是here。 你可以做到

    $Calle = db('VoipBill')
        ->table('billing as bsrc')
        ->join('billing as bdst', 'bsrc.srcnum', '=', 'bdst.dstnum')
        ->where('bsrc.acct_name', '100080_company')
        ->where('bsrc.srcnum', $call->srcnum)
        ->whereBetween('bsrc.calldate', [$set_time_lower, $set_time_upper])
        ->get();

答案 1 :(得分:2)

官方doc现在非常清楚地描述了它并支持多种选择。这是一个简短的总结...

大多数常用方式是使用此表单:

basedir = "/whatever/whatever"
basedir = ${?FORCED_BASEDIR}

如果设置了env变量,那么它将覆盖您的默认值,否则它将保持不变。

更强大的方法是使用JVM属性-Dconfig.override_with_env_vars=true来覆盖任何配置变量。在这种情况下,您不必创建重复的声明。您的env变量必须以前缀CONFIG_FORCE_命名。了解env var如何在文档中配置名称映射。例如:CONFIG_FORCE_a_b__c___d将映射到a.b-c_d

最后,如果你想推出自己的映射,这与上面描述的选项类似,而不使用override_with_env_vars,你可以使用一些shell黑客攻击,如下所述。

如果必须使用环境变量,并且如果它们的命名与配置名称一致,则可以使用这样的bash脚本自动从环境变量转换为JVM cmd args。这些-D JVM args将覆盖Typesafe配置值。例如:

# 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

将大写转换为小写,如果它们没有直接映射到您的配置值,请根据需要对env变量进行子串操作。

答案 2 :(得分:0)

我正在使用系统属性-Dconfig.override_with_env_vars=true。有了它,所有属性都可以通过环境变量自动覆盖。