【问题标题】:Flat Vert.x YAML ConfigFlat Vert.x YAML 配置
【发布时间】:2020-05-11 14:17:55
【问题描述】:

我们想知道是否可以扁平化 YAML 配置对象?例如,我们的配置文件看起来像

vertx:
  verticle:
    instance: 1
  metrics:
    options:
      enabled: true

我们希望只通过一个操作来访问我们的配置值,例如:

config.getInteger("vertx.verticle.instance")

而不必做:

config.getJsonObject("vertx").getJsonObject("verticle").getInteger("integer")

谢谢。

【问题讨论】:

    标签: yaml config vert.x


    【解决方案1】:

    Vert.x supports 来自 RFC6901 的 Json 指针。你可以这样做:

    JsonPointer pointer = JsonPointer.from("/vertx/verticle/instance");
    Integer instance = (Integer) pointer.queryJson(config);
    

    【讨论】:

      【解决方案2】:

      虽然 API 不直接支持它,但自己实现似乎很容易:

      public class FlatConfig {
          private final JsonObject root;
      
          public FlatConfig(JsonObject root) {
              this.root = root;
          }
      
          private JsonObject walk(String[] path) {
              JsonObject cur = root;
              // skip last element since it contains the value
              for (int i = 0; i < path.length - 2; i++) {
                  cur = cur.getJsonObject(path[i]);
              }
              return cur;
          }
      
          public Integer getInteger(String path) {
              final String[] splitPath = path.split(".");
              return walk(splitPath).getInteger(splitPath[splitPath.length - 1]);
          }
      }
      

      您可以根据需要添加其他方法来检索其他类型。

      【讨论】:

      • 感谢您的回答,我更喜欢这种方法将 JsonObject 扁平化为另一个 JsonObject。这是一个提议:github.com/georocket/georocket/blob/master/georocket-common/src/…
      • 当然。如果您更改 Vert.x 配置的生成结构,我会质疑您为什么要使用该 API。我的意思是,您可以使用 SnakeYAML 将配置加载到 POJO 中,然后可以使用 config.vertx.verticle.instance... 访问它
      • 我不确定你的问题。我的用例是: - 使用ConfigRetriever 读取配置 - 使用读取配置到DeploymentOptions 来部署顶点 - 访问顶点内部的配置属性。
      • 我不太了解 vert.x API,您可能更清楚自己在做什么。我的观点是,对于轻松访问 YAML 文件中的值的用例,这种方法并不理想。如果您在其他地方需要 JsonObject 进行 API 调用,那当然是合理的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 2012-05-08
      相关资源
      最近更新 更多