Как использовать свойства системы для замены заполнителей в файле Configafe Config?

Мне нужно ссылаться на java.io.tmpdir в файле application.conf

Я распечатал содержимое моей конфигурации с помощью

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

Итак, я думаю, что прямая ссылка не работает. Есть ли способ, чтобы мои параметры загружались после свойств системы, поэтому парсер конфигурации правильно заменит значения?

Ответ 1

Прямые ссылки работают нормально; Я считаю, что проблема в том, что у вас есть синтаксис ${} внутри кавычек, поэтому он не имеет особого значения. Попробуйте это следующим образом:

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

(обратите внимание, что материал ${} не цитируется)

В формате HOCON все, что действительный JSON будет интерпретироваться так же, как и в JSON, поэтому цитируемые строки, например, не имеют специального синтаксиса внутри них, кроме поддерживаемых последовательностей JSON.