二方库配置文件的覆盖方式:如果应用的配置中有需要的参数,与应用为准;如果不存在,则以二方库默认的参数为准。
- public class UnicornConfig implements Serializable {
- private static final long serialVersionUID = 2771610982265629832L;
- private static Logger logger = LoggerFactory
- .getLogger(UnicornConfig.class);
- private static final String DEFAULTFILE = "/com/alibaba/unicorn/default.properties";
- private static final String USERCONF = "unicorn.properties";
- private String configFile;
- private static PropertiesConfiguration defaultConfiguration = new PropertiesConfiguration();
- private PropertiesConfiguration configuration = new PropertiesConfiguration();
- static {
- InputStream inputStream = UnicornConfig.class.getResourceAsStream(DEFAULTFILE);
- try {
- defaultConfiguration.load(inputStream);
- } catch (ConfigurationException e) {
- logger.error("initial default config failed.");
- }
- }
- public UnicornConfig() {
- this.configFile = USERCONF;
- }
- public PropertiesConfiguration getConfiguration() {
- InputStream sourceInput = Thread.currentThread().getContextClassLoader()
- .getResourceAsStream(configFile);
- if (sourceInput == null) {
- logger.info("unicorn config not exist in app classpath, use system provide configuration.");
- return defaultConfiguration;
- }
- try {
- configuration.load(sourceInput);
- } catch (ConfigurationException e) {
- logger.error("load config file: " + configFile + "failed. " + e.getStackTrace());
- throw new RuntimeException(e);
- }
- @SuppressWarnings("unchecked")
- Iterator<String> keys = configuration.getKeys();
- while (keys.hasNext()) {
- String currentKey = keys.next();
- if (defaultConfiguration.containsKey(currentKey)) {
- defaultConfiguration.clearProperty(currentKey);
- defaultConfiguration.addProperty(currentKey, configuration.getProperty(currentKey));
- }
- }
- return defaultConfiguration;
- }
- }
【注】
1、PropertiesConfiguration 的添加配置时,如果存在则以存在的为准,不覆盖;如果需要覆盖,则需要先调用clearProperty方法