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

java非web应用修改 properties/xml配置文件后,无需重启应用即可生效---自动加载的更多相关文章

  1. (转)ALSA配置文件(alsa.conf, asoundrc, asound.conf)及其自动加载 And HDMI Adiuo

    原文出处:http://blog.sina.com.cn/s/blog_a04184c101010kry.html 警告:错误的EDID会造成HDMI发声异常 #title:box:HDMI Audi ...

  2. web.xml的contextConfigLocation作用及自动加载applicationContext.xml

    web.xml的contextConfigLocation作用及自动加载applicationContext.xml 转自:http://blog.csdn.net/sapphire_aling/ar ...

  3. ssh整合思想初步 struts2与Spring的整合 struts2-spring-plugin-2.3.4.1.jar下载地址 自动加载Spring中的XML配置文件 Struts2下载地址

    首先需要JAR包 Spring整合Structs2的JAR包 struts2-spring-plugin-2.3.4.1.jar 下载地址 链接: https://pan.baidu.com/s/1o ...

  4. Logstash配置文件修改自动加载和指定目录进行启动

    检查配置并启动Logstash,修改后自动加载 指定配置文件目录并启动Logstash

  5. Eclipse下SpringBoot没有自动加载application.properties文件

    Eclipse内创建SpringBoot项目,在java/main/resources文件夹下面创建application.properties配置文件,SpringApplication.run后发 ...

  6. spring的applicationContext.xml如何自动加载

    一个web工程自动加载的配置文件只有web.xml,想要加载其他.xml必须在web.xml里面进行配置. 用spring的时候需要一个bean容器来管理所有的bean,所有bean默认是写在appl ...

  7. spring boot修改代码后无需重启设置,在开发时实现热部署

    Spring Boot在开发时实现热部署(开发时修改文件保存后自动重启应用)(spring-boot-devtools) 热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构, ...

  8. iOS开发 XML解析和下拉刷新,上拉加载更多

    iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...

  9. springboot属性类自动加载配置文件中的值

    springboot属性类自动加载配置文件中的值,如Person类加载在yml中配置的name,age等属性值,可以通过如下步骤获取: 类上添加@ConfigurationProperties注解,p ...

随机推荐

  1. C++中JSON的使用详解【转】

    https://blog.csdn.net/admin_maxin/article/details/53175779 jsoncpp 主要包含三个class:Value.Reader.Writer.注 ...

  2. 详说 Block Formatting Contexts (块级格式化上下文)

    在上文<详说清除浮动>中,Kayo 较为详细地介绍了 BFC ,也就是本文的主角 Block Formatting Contexts (块级格式化上下文),本文会基于上文关于 BFC 的部 ...

  3. ofstream的使用方法--超级精细。C++文件写入、读出函数(转)

    ofstream的使用方法ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;  在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的, ...

  4. python3 杀死进程

    在windows10杀死进程:Shadowsocks.exe os.system('taskkill /f /im %s' % 'Shadowsocks.exe')

  5. Android -- 处理ViewPager的notifyDataSetChanged无刷新

    Viewpager在调用notifyDataSetChanged()时,界面无刷新 Viewpager在调用notifyDataSetChanged()时,界面无刷新,它确实影响我们功能的实现了.可能 ...

  6. 双数组Trie的一种实现

    An Implementation of Double-Array Trie 双数组Trie的一种实现 原文:http://linux.thai.net/~thep/datrie/datrie.htm ...

  7. HTML/CSS-返回到上一页

    <a class="back_btn" href="javascript:window.history.go(-1)">< 返回</a& ...

  8. Java-JUC(九):使用Lock替换synchronized,使用Condition的await,singal,singalall替换object的wait,notify,notifyall实现线程间的通信

    Condition: condition接口描述了可能会与锁有关的条件变量.这些用法上与使用object.wait访问隐式监视器类似,但提供了更强大的功能.需要特别指出的是,单个lock可能与多个Co ...

  9. Idea不能新建package的解决

    右键–>new –> Mark Directory As –> Sources Root (idea需要修改一下目录的性质,改为源文件 )

  10. ElasticSearch5.X—模糊查询和获取所有索引字段

    最近在做一个分布式数据存储的项目,需要用到ElastciSearch加速数据查询,其中部分功能需要进行模糊查询和统计索引库中已经建立的索引字段,网上查阅了很多资料,最终把这两个问题解决了,不容易!下面 ...