2013-08-29 7 views
12

Ich muss java.io.tmpdir in meiner application.conf Datei verweisenWie verwenden Sie Systemeigenschaften, um Platzhalter in der TypeSafe Config-Datei zu ersetzen?

I Inhalt meiner Config mit

val c = ConfigFactory.load() 
System.err.println(c.root().render()) 

gedruckt und es macht es wie

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

Also ich denke, dass Vorwärts-Referenz nicht funktioniert. Gibt es eine Möglichkeit, meine Optionen nach Systemeigenschaften zu laden, damit der Config-Parser die Werte korrekt ersetzt?

+0

Beachten Sie, dass 'ConfigFactory.parseFile' keine Systemeigenschaften verwendet, während' ConfigFactory.load' dies tut. – Vadzim

Antwort

16

Vorwärtsreferenzen funktionieren gut; Ich glaube, das Problem ist nur, dass Sie die ${} Syntax in Anführungszeichen haben, so dass es keine besondere Bedeutung hat. Probieren Sie es wie folgt aus:

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

(beachten Sie, dass die ${} Sachen nicht zitiert)

Im HOCON Format, alles, was gültig JSON ist wird interpretiert, wie es in JSON, so Strings in Anführungszeichen wäre zum Beispiel Sie haben keine spezielle Syntax in ihnen, außer den Escape-Sequenzen, die JSON unterstützt.