docs: @Override
      public void init() {
          // if it is necessary to load config files from config server
          // Here we expect at least env(dev/sit/uat/prod) and optional config server url
          if (lightEnv == null) {
              logger.warn("Warning! No light-env has been passed in from command line. Defaulting to {}",DEFAULT_ENV);
              lightEnv = DEFAULT_ENV;
          }
  
          String configUri = System.getProperty(LIGHT_CONFIG_SERVER_URI);
          if (configUri != null) {
              // try to get config files from the server.
              String targetMergeDirectory = System.getProperty(Config.LIGHT_4J_CONFIG_DIR);
              if (targetMergeDirectory == null) {
                  logger.warn("Warning! No light-4j-config-dir has been passed in from command line.");
                  return;
              }
              String version = Util.getJarVersion();
              String service = Server.config.getServiceId();
              String tempDir = System.getProperty("java.io.tmpdir");
              String zipFile = tempDir + "/config.zip";
              // /v1/config/1.2.4/dev/com.networknt.petstore-1.0.0
  
              String path = "/v1/config/" + version + "/" + lightEnv + "/" + service;
              Http2Client client = Http2Client.getInstance();
              ClientConnection connection = null;
              try {
                  connection = client.connect(new URI(configUri), Http2Client.WORKER, Http2Client.SSL, Http2Client.BUFFER_POOL,
                          OptionMap.create(UndertowOptions.ENABLE_HTTP2, true)).get();
              } catch (Exception e) {
                  logger.error("Exeption:", e);
              }
              final CountDownLatch latch = new CountDownLatch(1);
              final AtomicReference<ClientResponse> reference = new AtomicReference<>();
              try {
                  ClientRequest request = new ClientRequest().setMethod(Methods.GET).setPath(path);
                  request.getRequestHeaders().put(Headers.HOST, "localhost");
                  connection.sendRequest(request, client.createClientCallback(reference, latch));
                  latch.await();
                  int statusCode = reference.get().getResponseCode();
  
                  if (statusCode >= 300) {
                      logger.error("Failed to load config from config server" + statusCode + ":"
                              + reference.get().getAttachment(Http2Client.RESPONSE_BODY));
                      throw new Exception("Failed to load config from config server: " + statusCode);
                  } else {
                      // TODO test it out
                      FileOutputStream fos = new FileOutputStream(zipFile);
                      fos.write(reference.get().getAttachment(Http2Client.RESPONSE_BODY).getBytes(UTF_8));
                      fos.close();
                      unzipFile(zipFile, targetMergeDirectory);
                  }
              } catch (Exception e) {
                  logger.error("Exception:", e);
              } finally {
                  IoUtils.safeClose(connection);
              }
          } else {
              logger.info("light-config-server-uri is missing in the command line. Use local config files");
          }
      }