Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use system properties to substitute placeholders in Typesafe Config file?

I need to refer to java.io.tmpdir in my application.conf file

I printed content of my config with

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

and it renders it like

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

So I guess that forward-reference does not work. Is there any way to get my options loaded after system properties, so config parser will correctly substitute values?

like image 642
jdevelop Avatar asked Aug 29 '13 20:08

jdevelop


1 Answers

Forward references work fine; I believe the issue is just that you have the ${} syntax inside of quotes, so it doesn't have special meaning. Try it like this:

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

(note that the ${} stuff is not quoted)

In the HOCON format, anything that's valid JSON will be interpreted as it would be in JSON, so quoted strings for example don't have special syntax inside them, other than the escape sequences JSON supports.

like image 185
Havoc P Avatar answered Oct 21 '22 19:10

Havoc P