如何使用系统属性替换Typesafe配置文件中的占位符?

时间:2013-08-29 20:16:52

标签: scala config typesafe

我需要在我的application.conf文件中引用 java.io.tmpdir

我用

打印了我的配置内容
val c = ConfigFactory.load()
System.err.println(c.root().render())

并将其呈现为

# dev/application.conf: 1
"myapp" : {
    # dev/application.conf: 47
    "db" : {
        # dev/application.conf: 49
        "driver" : "org.h2.Driver",
        # dev/application.conf: 48
        "url" : "jdbc:h2:file:${java.io.tmpdir}/db;DB_CLOSE_DELAY=-1"
    }
 ...
 }
# system properties
"java" : {
    # system properties
    "io" : {
        # system properties
        "tmpdir" : "/tmp"
    },
....

所以我猜这个前向引用不起作用。有没有办法在系统属性后加载我的选项,所以config解析器会正确地替换值?

1 个答案:

答案 0 :(得分:19)

前向引用工作正常;我认为问题只是你在引号内有${}语法,所以它没有特殊含义。试试这样:

url = "jdbc:h2:file:"${java.io.tmpdir}"/db;DB_CLOSE_DELAY=-1"

(请注意,未引用${}内容)

在HOCON格式中,任何有效的JSON都将被解释为JSON中的内容,因此引用的字符串除了JSON支持的转义序列之外,其中没有特殊的语法。