无法在“.listen()”方法之外获取任何配置读数

时间:2016-12-23 15:07:16

标签: vert.x

我无法在“.listen()”方法之外获得任何配置读数。

public class APIVerticle extends AbstractVerticle {

    @Override
    public void start(Future<Void> fut) {
            System.out.println("Config: " + config().getInteger("http.port")); //prints null

            vertx
                    .createHttpServer(serverOptions)
                    .requestHandler(router::accept)
                    .listen(
                            config().getInteger("http.port", 8080), //gets 8082
                            result -> {
                                if (result.succeeded()) {
                                    fut.complete();
                                } else {
                                    fut.fail(result.cause());
                                }
                            }
                    );
      }
}

我的配置文件:

{
    "http.port": 8082
}

它被打包成一个带有maven-shade-plugin插件的胖罐。

有人知道为什么吗?

1 个答案:

答案 0 :(得分:1)

那是因为您的AbstractVerticle没有收到任何部署选项。这是定制的。您可以在Starter类中看到它是如何完成的示例:

 String confArg = args.map.get("-conf");
    JsonObject conf;

    if (confArg != null) {
      try (Scanner scanner = new Scanner(new File(confArg)).useDelimiter("\\A")){
        String sconf = scanner.next();
        try {
          conf = new JsonObject(sconf);
        } catch (DecodeException e) {
          log.error("Configuration file " + sconf + " does not contain a valid JSON object");
          return;
        }
      } catch (FileNotFoundException e) {
        try {
          conf = new JsonObject(confArg);
        } catch (DecodeException e2) {
          log.error("-conf option does not point to a file and is not valid JSON: " + confArg);
          return;
        }
      }
    } else {
      conf = null;
    }

    ...
    deploymentOptions = new DeploymentOptions();
    deploymentOptions.setConfig(conf)

HttpServer默认接收这些DeploymentOptions。 如果您有传递到自定义Verticle的选项,请将它们作为.deployVerticle

的第二个参数传递