我仅限于hocon
在我们的 java 应用程序中使用我们的配置文件。我的问题是我无法更改格式,但我现在需要将其存储在另一个只接受平面yaml
文件的后端。
示例app.conf
文件:
play {
http {
port = 9000
port = ${?HTTP_PORT}
secret.key = "secretKey"
secret.key = ${?APPLICATION_SECRET}
errorHandler = Example.handler.ErrorHandler
}
}
尝试 1:hocon
使用 TypesafeConfig 读取和解析文件:
final ConfigRenderOptions renderOptions = ConfigRenderOptions.defaults()
.setOriginComments( false )
.setJson( true )
.setComments( false );
// Render mergedConfig: Config
String jsonFromHocon = mergedConfig.root().render( renderOptions );
final JsonNode jsonNodeTree = mapper.readTree( jsonFromHocon );
出现这种情况有2个问题:
将
mapper.readTree
抛出错误,因为第二个条目play.http.port
不是数字并且没有引用,${?HTTP_PORT}
是文字值;如果未引用该值,我想保留 hocon 的功能,其中包括 env 替换。即使这些值已转换为合法值 - 当它转换为 json 时,它也会被最后一个值覆盖。这打破了与 hocon 的功能对等性。
关于如何利用 typeSafe 配置功能将 conf 打印为半有效 json 的任何想法。
除非我能够操纵值的结果,否则我不能使用打包的 json 解析器。我在谷歌上搜索了一些关于如何自定义读取值的信息,但我认为目前不可能。
预期输出:为所有值添加引号并将值附加__replace__
到具有重复键的所有键并具有环境变量
play {
http {
port = "9000"
port__replace__ = "${?HTTP_PORT}"
secret.key = "\"secretKey\""
secret.key__replace__ = "${?APPLICATION_SECRET}"
errorHandler = "Example.handler.ErrorHandler"
}
}
请证明我错了!或者提出一个想法!那里有 yaml 格式解析器的 hocon 格式吗?