zoukankan      html  css  js  c++  java
  • java非web应用修改 properties/xml配置文件后,无需重启应用即可生效---自动加载

    实现时主要使用Commons-Configuration.jar包,还需要commons-lang,disgestor,beanutils,collections等,

    package propFile;

    import java.net.URL;
    import java.util.List;

    import org.apache.commons.configuration.Configuration;
    import org.apache.commons.configuration.ConfigurationException;
    import org.apache.commons.configuration.ConfigurationFactory;
    import org.apache.commons.configuration.PropertiesConfiguration;
    import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;

    /**
     * 修改 properties 文件时,每次都要重启应用程序, Commons-Configuration 调用 getXxxx 方法获取到的内容都是
     * properties 文件中最新的,无需重启应用
     *
     * @author zhaigx
     * @DATA 2011-5-27
     */
    public class PropertiesUtil {
     static String propertiesFile = "config/config.properties";
     static PropertiesConfiguration propConfig;
     static Configuration multiConfig;
     static boolean isReload = true;

     private PropertiesUtil() {

     }

     private static void reloadPropFile() {
      if (isReload) {
       try {
        propConfig = new PropertiesConfiguration(propertiesFile);
        propConfig
          .setReloadingStrategy(new FileChangedReloadingStrategy());
       } catch (ConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
      }
      isReload = false;
     }

     public static Object getValueFromPropFile(String key) {
      reloadPropFile();
      return propConfig.getProperty(key);
     }
     public static String[] getArrFromPropFile(String key){
      reloadPropFile();
      return propConfig.getStringArray(key);
     }
     

     private static void reloadMultiConfigFile() {
      ConfigurationFactory factory = new ConfigurationFactory();
      String file = "config/xml-prop.xml";
      System.out.println("multiConfigFile==> " + file);
      factory.setConfigurationFileName(file);

      try {
       multiConfig = factory.getConfiguration();
      } catch (ConfigurationException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }

     public static Object getValueFromMultiFile(String key) {
      reloadMultiConfigFile();
      return multiConfig.getProperty(key);
     }
    }

    测试类:

    package propFile;

    import java.util.List;

    import propFile.PropertiesUtil;

    public class PropertiesUtilTest {

     /**
      *
      * @author zhaigx
      * @param args
      * @DATE 2011-5-27
      */
     public static void main(String[] args) {
    //  for (int i = 0; i < 1000; i++) {
    //   String valueString = (String) PropertiesUtil
    //     .getValueFromPropFile("name");
    //   System.out.println(valueString);
    //   try {
    //    Thread.sleep(1000);
    //   } catch (InterruptedException e) {
    //    // TODO Auto-generated catch block'
    //    e.printStackTrace();
    //   }
    //  }
      
      String[] country=(String[])PropertiesUtil.getArrFromPropFile("country");
      for (int i = 0; i < country.length; i++) {
       System.out.println(country[i]);
      }
      

      List list = (List) PropertiesUtil
        .getValueFromMultiFile("start-criteria.criteria");
      for (int i = 0; i < list.size(); i++) {
       String value = list.get(i).toString();
       System.out.println(value);
      }

      for (int i = 0; i < 1000; i++) {
       int intValue = Integer.parseInt(PropertiesUtil
         .getValueFromMultiFile("horsepower").toString());
       System.out.println(intValue);
       try {
        Thread.sleep(1000);
       } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }

      }

     }

    }

    config目录下的配置文件:

    config.properties:

    a=1
    b=3
    name=to
    country = USA,China,English

    xml-prop.xml:

    <?xml version="1.0" encoding="gbk" ?>
    <configuration>
     <properties fileName="global.properties"></properties>
     <xml fileName="global.xml"></xml>
    </configuration>

    global.properties:

    threads.maximum=50
    threads.minimum=20
    timeout=15.52
    interactive=true
    color=red
    speed=50
    name=Default User

    region=Earth

    global.xml:

    <?xml version="1.0" encoding="gbk" ?>
    <engine-config>
     <start-criteria>
      <criteria>
       Temperature Above -10 Celsius
      </criteria>
      <criteria>
       Fuel tank is not empty
      </criteria>
     </start-criteria>
     <volume>4 Liters</volume>
     <horsepower>77</horsepower>
    </engine-config>

  • 相关阅读:
    关于Xil_Assert断言产生的死循环,导致程序未执行的问题
    Unable to connect to ps7_cortexa9的参考解决方案Zedboard,zynq
    Xilinx SDK下载时出现的几个问题总结
    深入分析SCU GIC驱动 1 ZEDBOARD,ZYNQ7000
    Git命令行介绍和使用说明(持续更新)
    常用快捷键—Webstorm入门指南
    数组和链表的关系
    把Sublime Text 2固定到Ubuntu启动器
    Node的Eclipse插件 Nodeclipse
    Sublime 自定义格式化快捷键
  • 原文地址:https://www.cnblogs.com/huapox/p/3509665.html
Copyright © 2011-2022 走看看