如何使用系统属性替换 Typesafe Config 文件中的占位符?
Posted
技术标签:
【中文标题】如何使用系统属性替换 Typesafe Config 文件中的占位符?【英文标题】:How to use system properties to substitute placeholders in Typesafe Config file? 【发布时间】:2013-09-02 10:26:46 【问题描述】:我需要在我的 application.conf 文件中引用 java.io.tmpdir
我用
打印了我的配置内容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"
,
....
所以我猜前向引用不起作用。有没有办法在系统属性之后加载我的选项,以便配置解析器正确替换值?
【问题讨论】:
请注意ConfigFactory.parseFile
不使用系统属性,而ConfigFactory.load
使用。
【参考方案1】:
前向引用工作正常;我相信问题只是你在引号内有$
语法,所以它没有特殊含义。试试这样:
url = "jdbc:h2:file:"$java.io.tmpdir"/db;DB_CLOSE_DELAY=-1"
(注意$
的东西没有被引用)
在 HOCON 格式中,任何有效的 JSON 都将被解释为它在 JSON 中的样子,因此引用的字符串内部没有特殊语法,除了 JSON 支持的转义序列。
【讨论】:
以上是关于如何使用系统属性替换 Typesafe Config 文件中的占位符?的主要内容,如果未能解决你的问题,请参考以下文章
Play TypeSafe Activator 无法启动 - IllegalArgumentException“无法下载新模板目录属性”
如何使用 Enum 类型的字段执行 Typesafe JSON?
typesafe 使用 reactjs 和 typescript 选择 onChange 事件
如何在 Typesafe Config 中获取未包装的密钥?