From 26cc1705f5e1e9c511df1cee5e1d1dd2237df649 Mon Sep 17 00:00:00 2001 From: nobodyiam Date: Sat, 29 Apr 2017 23:24:02 +0800 Subject: [PATCH] load config file(apollo-env.properties) from working directory first, so that it behaves the same as spring boot config files --- .../apollo/core/utils/ResourceUtils.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/apollo-core/src/main/java/com/ctrip/framework/apollo/core/utils/ResourceUtils.java b/apollo-core/src/main/java/com/ctrip/framework/apollo/core/utils/ResourceUtils.java index 20cedbb14dd..616fd99d130 100644 --- a/apollo-core/src/main/java/com/ctrip/framework/apollo/core/utils/ResourceUtils.java +++ b/apollo-core/src/main/java/com/ctrip/framework/apollo/core/utils/ResourceUtils.java @@ -9,16 +9,18 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Enumeration; import java.util.Properties; public class ResourceUtils { private static final Logger logger = LoggerFactory.getLogger(ResourceUtils.class); + private static final String[] DEFAULT_FILE_SEARCH_LOCATIONS = new String[]{"./config/", "./"}; @SuppressWarnings("unchecked") public static Properties readConfigFile(String configPath, Properties defaults) { - InputStream in = ClassLoaderUtil.getLoader().getResourceAsStream(configPath); + InputStream in = loadConfigFileFromDefaultSearchLocations(configPath); logger.debug("Reading config from resource {}", configPath); Properties props = new Properties(); try { @@ -65,4 +67,19 @@ public static Properties readConfigFile(String configPath, Properties defaults) } return props; } + + private static InputStream loadConfigFileFromDefaultSearchLocations(String configPath) { + for (String searchLocation : DEFAULT_FILE_SEARCH_LOCATIONS) { + try { + File candidate = Paths.get(searchLocation, configPath).toFile(); + if (candidate.exists() && candidate.isFile() && candidate.canRead()) { + return new FileInputStream(candidate); + } + } catch (Throwable ex) { + //ignore + } + } + + return ClassLoaderUtil.getLoader().getResourceAsStream(configPath); + } }