0

我仅限于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 格式吗?

4

0 回答 0