apollo-core/src/main/java/com/ctrip/framework/apollo/core/utils/ResourceUtils.java/ResourceUtils/loadConfigFileFromDefaultSearchLocations
class ResourceUtils:  private static InputStream loadConfigFileFromDefaultSearchLocations(String configPath) {
    try {
      // load from default search locations
      for (String searchLocation : DEFAULT_FILE_SEARCH_LOCATIONS) {
        File candidate = Paths.get(searchLocation, configPath).toFile();
        if (candidate.exists() && candidate.isFile() && candidate.canRead()) {
          logger.debug("Reading config from resource {}", candidate.getAbsolutePath());
          return new FileInputStream(candidate);
        }
      }

      // load from classpath
      URL url = ClassLoaderUtil.getLoader().getResource(configPath);

      if (url != null) {
        InputStream in = getResourceAsStream(url);

        if (in != null) {
          logger.debug("Reading config from resource {}", url.getPath());
          return in;
        }
      }

      // load outside resource under current user path
      File candidate = new File(System.getProperty("user.dir"), configPath);
      if (candidate.exists() && candidate.isFile() && candidate.canRead()) {
        logger.debug("Reading config from resource {}", candidate.getAbsolutePath());
        return new FileInputStream(candidate);
      }
    } catch (FileNotFoundException e) {
      //ignore
    }
    return null;
  }