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>
java非web应用修改 properties/xml配置文件后,无需重启应用即可生效---自动加载的更多相关文章
- (转)ALSA配置文件(alsa.conf, asoundrc, asound.conf)及其自动加载 And HDMI Adiuo
原文出处:http://blog.sina.com.cn/s/blog_a04184c101010kry.html 警告:错误的EDID会造成HDMI发声异常 #title:box:HDMI Audi ...
- web.xml的contextConfigLocation作用及自动加载applicationContext.xml
web.xml的contextConfigLocation作用及自动加载applicationContext.xml 转自:http://blog.csdn.net/sapphire_aling/ar ...
- 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 ...
- Logstash配置文件修改自动加载和指定目录进行启动
检查配置并启动Logstash,修改后自动加载 指定配置文件目录并启动Logstash
- Eclipse下SpringBoot没有自动加载application.properties文件
Eclipse内创建SpringBoot项目,在java/main/resources文件夹下面创建application.properties配置文件,SpringApplication.run后发 ...
- spring的applicationContext.xml如何自动加载
一个web工程自动加载的配置文件只有web.xml,想要加载其他.xml必须在web.xml里面进行配置. 用spring的时候需要一个bean容器来管理所有的bean,所有bean默认是写在appl ...
- spring boot修改代码后无需重启设置,在开发时实现热部署
Spring Boot在开发时实现热部署(开发时修改文件保存后自动重启应用)(spring-boot-devtools) 热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构, ...
- iOS开发 XML解析和下拉刷新,上拉加载更多
iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...
- springboot属性类自动加载配置文件中的值
springboot属性类自动加载配置文件中的值,如Person类加载在yml中配置的name,age等属性值,可以通过如下步骤获取: 类上添加@ConfigurationProperties注解,p ...
随机推荐
- xenapp 6.5 客户端插件第一次安装总是跳到官网
部署完xenapp6.5后,在没有安装插件的客户端登录时,会出现“下载客户端插件”界面 其实网上已经有很多解决方案,大同小已,只是不知道为什么不适合我安装的版本而已.我安装时最新的版本xenapp 6 ...
- SVN服务器搭建和使用(转)
Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http:// ...
- iOS开发-UITextView实现PlaceHolder的方式
之前开发遇到过UITextField中加入一个PlaceHolder的问题,直接设置一下即可,不过这次是需要在UITextView中实现一个PlaceHolder,跟之前有点不同.在网上参考了各位前辈 ...
- Binary Tree ZigZag Level Order Traversal leetcode java
题目: Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from lef ...
- WebView JS交互 JSBridge 案例 原理 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Js组件的一些写法
首先看下Prototype里的写法: var Class = { create: function() { return function() { this.init.apply(this, argu ...
- 转:利用Eclipse CDT 阅读C/C++代码
转自: https://www.oschina.net/question/234345_41419 排版与说明都很不错,推荐一看.
- 编程实战——电影管理器之XML存储电影信息数据
但凡管理器之类的软件,存储数据是必不可少的.存储数据的话,有几种选择.一是用数据库,把数据存储到数据库里:一是用文本文件,把数据存储到文本文件里:一种是利用XML文件,把数据对象转换为XML后,存储到 ...
- artTemplate--使用artTemplate时,由于json对象属性有特殊格式 导致调用报错artTemplate,syntax error,Template Error
我们首先看下面的代码 data = { "siteName" : "西部云谷二期17", "PM10" : "10017" ...
- 界面为ScrollView时打开界面会自动滚动到底部之解决方法
开发中遇到了这样的一个问题,界面最外层是ScrollView,然后里面有嵌套了一个ListView还有其他可以获取焦点的View,然后每次打开界面都会自动滚动到最底部,经过一番折腾,发现了一个简单的方 ...