2013-08-29 60 views
12

我需要參考java.io.tmpdir我application.conf文件如何使用系統屬性在Typesafe Config文件中替換佔位符?

我印我的配置的內容與

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" 
    }, 
.... 

所以我猜這個前向引用不起作用。有沒有什麼辦法讓系統屬性後加載我的選項,所以配置解析器將正確替換值?

+0

請注意,'ConfigFactory.parseFile'不會在ConfigFactory.load中使用系統屬性。 – Vadzim

回答

16

轉發引用正常工作;我相信這個問題只是在引號內部有${}語法,所以它沒有特別的意義。試着這樣說:

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

例如(注意${}東西是沒有加引號)

在HOCON格式,任何的有效的JSON將被解釋爲這將是JSON,所以引用的字符串除了JSON支持的轉義序列以外,其內部沒有特殊的語法。

相關問題