二方库配置文件的覆盖方式:如果应用的配置中有需要的参数,与应用为准;如果不存在,则以二方库默认的参数为准。

 
  
  1. public class UnicornConfig implements Serializable { 
  2.     private static final long              serialVersionUID     = 2771610982265629832L; 
  3.     private static Logger                  logger               = LoggerFactory 
  4.                                                                         .getLogger(UnicornConfig.class); 
  5.     private static final String            DEFAULTFILE          = "/com/alibaba/unicorn/default.properties"
  6.     private static final String            USERCONF             = "unicorn.properties"
  7.  
  8.     private String                         configFile; 
  9.     private static PropertiesConfiguration defaultConfiguration = new PropertiesConfiguration(); 
  10.     private PropertiesConfiguration        configuration        = new PropertiesConfiguration(); 
  11.  
  12.     static { 
  13.         InputStream inputStream = UnicornConfig.class.getResourceAsStream(DEFAULTFILE); 
  14.         try { 
  15.             defaultConfiguration.load(inputStream); 
  16.         } catch (ConfigurationException e) { 
  17.             logger.error("initial default config failed."); 
  18.         } 
  19.     } 
  20.  
  21.     public UnicornConfig() { 
  22.         this.configFile = USERCONF; 
  23.     } 
  24.  
  25.     public PropertiesConfiguration getConfiguration() { 
  26.         InputStream sourceInput = Thread.currentThread().getContextClassLoader() 
  27.                 .getResourceAsStream(configFile); 
  28.         if (sourceInput == null) { 
  29.             logger.info("unicorn config not exist in app classpath, use system provide configuration."); 
  30.             return defaultConfiguration; 
  31.         } 
  32.  
  33.         try { 
  34.             configuration.load(sourceInput); 
  35.         } catch (ConfigurationException e) { 
  36.             logger.error("load config file: " + configFile + "failed. " + e.getStackTrace()); 
  37.             throw new RuntimeException(e); 
  38.         } 
  39.         @SuppressWarnings("unchecked"
  40.         Iterator<String> keys = configuration.getKeys(); 
  41.  
  42.         while (keys.hasNext()) { 
  43.             String currentKey = keys.next(); 
  44.             if (defaultConfiguration.containsKey(currentKey)) { 
  45.                 defaultConfiguration.clearProperty(currentKey); 
  46.                 defaultConfiguration.addProperty(currentKey, configuration.getProperty(currentKey)); 
  47.             } 
  48.         } 
  49.         return defaultConfiguration; 
  50.     } 

 

 

【注】

1、PropertiesConfiguration 的添加配置时,如果存在则以存在的为准,不覆盖;如果需要覆盖,则需要先调用clearProperty方法