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

StackOverflow https://stackoverflow.com/questions/18520235

  •  26-06-2022
  •  | 
  •  

سؤال

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?

هل كانت مفيدة؟

المحلول

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top