Unverified Commit a86dd3e0 by Jason Song Committed by GitHub

Merge pull request #803 from johnsonyjl/master

refactor the ResourceUtils for performance
parents 2bebe108 4ff0f795
...@@ -7,10 +7,8 @@ import java.io.File; ...@@ -7,10 +7,8 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.file.Files; import java.io.FileNotFoundException;
import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Enumeration;
import java.util.Properties; import java.util.Properties;
public class ResourceUtils { public class ResourceUtils {
...@@ -20,29 +18,18 @@ public class ResourceUtils { ...@@ -20,29 +18,18 @@ public class ResourceUtils {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static Properties readConfigFile(String configPath, Properties defaults) { public static Properties readConfigFile(String configPath, Properties defaults) {
InputStream in = loadConfigFileFromDefaultSearchLocations(configPath);
logger.debug("Reading config from resource {}", configPath);
Properties props = new Properties(); Properties props = new Properties();
try {
if (in == null) {
// load outside resource under current user path
Path path = new File(System.getProperty("user.dir") + configPath).toPath();
if (Files.isReadable(path)) {
in = new FileInputStream(path.toFile());
logger.debug("Reading config from file {} ", path);
} else {
logger.warn("Could not find available config file");
}
}
if (defaults != null) { if (defaults != null) {
props.putAll(defaults); props.putAll(defaults);
} }
InputStream in = loadConfigFileFromDefaultSearchLocations(configPath);
try {
if (in != null) { if (in != null) {
props.load(in); props.load(in);
in.close();
} }
} catch (Exception ex) { } catch (IOException ex) {
logger.warn("Reading config failed: {}", ex.getMessage()); logger.warn("Reading config failed: {}", ex.getMessage());
} finally { } finally {
if (in != null) { if (in != null) {
...@@ -53,33 +40,48 @@ public class ResourceUtils { ...@@ -53,33 +40,48 @@ public class ResourceUtils {
} }
} }
} }
if (logger.isDebugEnabled()) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (Enumeration<String> e = (Enumeration<String>) props.propertyNames(); e for (String sropertyName : props.stringPropertyNames()) {
.hasMoreElements();) { sb.append(sropertyName).append('=').append(props.getProperty(sropertyName)).append('\n');
String key = e.nextElement();
String val = (String) props.getProperty(key);
sb.append(key).append('=').append(val).append('\n');
} }
if (sb.length() > 0) { if (sb.length() > 0) {
logger.debug("Reading properties: \n" + sb.toString()); logger.debug("Reading properties: \n" + sb.toString());
} else { } else {
logger.warn("No available properties"); logger.warn("No available properties");
} }
}
return props; return props;
} }
private static InputStream loadConfigFileFromDefaultSearchLocations(String configPath) { private static InputStream loadConfigFileFromDefaultSearchLocations(String configPath) {
for (String searchLocation : DEFAULT_FILE_SEARCH_LOCATIONS) {
try { try {
for (String searchLocation : DEFAULT_FILE_SEARCH_LOCATIONS) {
File candidate = Paths.get(searchLocation, configPath).toFile(); File candidate = Paths.get(searchLocation, configPath).toFile();
if (candidate.exists() && candidate.isFile() && candidate.canRead()) { if (candidate.exists() && candidate.isFile() && candidate.canRead()) {
logger.debug("Reading config from resource {}", candidate.getAbsolutePath());
return new FileInputStream(candidate); return new FileInputStream(candidate);
} }
} catch (Throwable ex) {
//ignore
}
} }
return ClassLoaderUtil.getLoader().getResourceAsStream(configPath); InputStream in = ClassLoaderUtil.getLoader().getResourceAsStream(configPath);
if (in != null) {
logger.debug("Reading config from resource {}", ClassLoaderUtil.getLoader().getResource(configPath).getPath());
return in;
} else {
// 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;
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment