博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java非web应用修改 properties/xml配置文件后,无需重启应用即可生效---自动加载
阅读量:6240 次
发布时间:2019-06-22

本文共 3725 字,大约阅读时间需要 12 分钟。

实现时主要使用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>

 

转载于:https://www.cnblogs.com/huapox/p/3509665.html

你可能感兴趣的文章
什么是壳 - 脱壳篇01
查看>>
数据库基础
查看>>
python里面 循环明细对比 相同人员明细,生成同一订单里面
查看>>
linux top 命令的一些解释
查看>>
前端之HTML内容
查看>>
关于Datagridview控件用法的一些总结
查看>>
Mac 常用设置
查看>>
linux常用命令(22)gzip命令
查看>>
找出一个字符串中第一个只出现一次的字符
查看>>
CSS学习笔记(一)深入理解position属性和float属性
查看>>
xml入门
查看>>
python Flask框架mysql数据库配置
查看>>
[20150529]用户与用户组管理
查看>>
baidu__git_android
查看>>
ZC_源码编译真机烧写_20160424
查看>>
day26-UDP协议无粘包问题
查看>>
使用HTML5的十大原因
查看>>
转发:修饰符
查看>>
【转载】Linux下configure命令详细介绍
查看>>
图片中转站
查看>>