java读取系统Properties配置文件利用线程实时监控配置文件变化
2016-07-18 00:00
746 查看
package util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Properties; import org.apache.log4j.Logger; /** * 读取实时的配置文件信息 * @author frank * @date 2015-07-02 */ public class SysProperties { private static Logger log = Logger.getLogger(SysProperties.class); private static Properties SysLocalPropObject = null; //配置文件路径 private static String defaultPropFileName = "/config/system.properties"; //文件更新标识 protected long lastModifiedData = -1; private static SysProperties instance; public static SysProperties getInstance(){ if(instance == null){ instance = new SysProperties(); } return instance; } /** * @description 私有构造器启动一个线程实时监控配置文件 */ private SysProperties() { SysLocalPropObject = new Properties(); String tempPath = this.getClass().getResource(defaultPropFileName).getFile(); File tempFile = new File(tempPath); final String filePath; if(tempFile.exists()) { filePath = tempPath; } else { filePath = "system.properties"; } final SysProperties self = this; File propertyFile = new File(filePath); if (propertyFile.exists()) reloadFile(propertyFile); //循环监控配置文件的变化,一旦发现文件发生变化了则重读配置文件 Thread t = new Thread() { public void run() { while (true) { //间隔1秒 try { Thread.sleep(1000); } catch (InterruptedException e) { } try { File propertyFile = new File(filePath); if (self.lastModifiedData != propertyFile.lastModified()) { self.reloadFile(propertyFile); self.lastModifiedData = propertyFile.lastModified(); } } catch (Exception e) { } } } }; t.start(); } /** * 重新加载文件 * @author frank 2015-07-02 * @param propertyFile */ private void reloadFile(File propertyFile) { FileInputStream inputStreamLocal = null; try { inputStreamLocal = new FileInputStream(propertyFile); SysLocalPropObject.load(inputStreamLocal); } catch (Exception e) { if (e instanceof FileNotFoundException) { log.info("No Local Properties File Found"); SysLocalPropObject = null; } else { e.printStackTrace(); } } finally { try { if (inputStreamLocal != null) inputStreamLocal.close(); } catch (IOException e) { log.info("Exception is happened when to close file stream"); } } } /** * 根据key获取value * @author frank 2015-07-02 * @param property * @return String */ public String getProperty(String property) { String val = null; if (SysLocalPropObject != null) val = SysLocalPropObject.getProperty(property); return (val); } /** * 根据key获取value * @author frank 2015-07-02 * @param property * @param defaultValue 指定默认值 * @return String */ public String getProperty(String property, String defaultValue) { String val = null; if (SysLocalPropObject != null) { val = SysLocalPropObject.getProperty(property, defaultValue); } else { val = defaultValue; } return (val); } /** * 根据key获取value * @author frank 2015-07-02 * @param property * @return Integer */ public Integer getIntProperty(String property) { String val = getProperty(property); Integer nVal = null; if (val != null) { try { nVal = Integer.parseInt(val); } catch (Exception e) { } } return nVal; } /** * 根据key获取value * @author frank 2015-07-02 * @param property * @param defaultValue 指定默认值 * @return Integer */ public Integer getIntProperty(String property, Integer defaultValue) { Integer val = getIntProperty(property); if (val == null) { val = defaultValue; } return (val); } /** * 根据key获取value * @author frank 2015-07-02 * @param property * @return */ public Long getLongProperty(String property) { String val = getProperty(property); Long nVal = null; try { nVal = Long.parseLong(val); } catch (Exception e) { } return nVal; } /** * 根据key获取value * @author frank 2015-07-02 * @param property * @param defaultValue * @return */ public Long getLongProperty(String property, Long defaultValue) { Long val = getLongProperty(property); if (val == null) { val = defaultValue; } return (val); } /** * 根据key获取value * @author frank 2015-07-02 * @param property * @param defaultValue * @return */ public boolean getBooleanProperty(String property, boolean defaultValue) { boolean retval = false; String val = getProperty(property); if (val == null || val.equals("")) retval = defaultValue; else if (val.trim().equalsIgnoreCase("true") || val.trim().equals("1")) retval = true; return (retval); } /** * 根据key获取value * @author frank 2015-07-02 * @param property * @return */ public Double getDoubleProperty(String property) { String val = getProperty(property); Double nVal = null; try { nVal = Double.parseDouble(val); } catch (Exception e) { } return nVal; } /** * 根据key获取value * @author frank 2015-07-02 * @param property * @param defaultValue * @return */ public Double getDoubleProperty(String property, Double defaultValue) { Double val = getDoubleProperty(property); if (val == null) { val = defaultValue; } return (val); } }
相关文章推荐
- Ubuntu 安装 JDK 7 / JDK8 的两种方式
- 【SSH系列】深入浅出spring IOC中三种依赖注入方式
- 【SSH系列】深入浅出spring IOC中三种依赖注入方式
- java代码获取系统时间相差8小时
- Tycho - 用Maven Build Eclipse插件
- 完美解决 java.lang.NoClassDefFoundError R$layout R$di
- mybatis, spring , logback 配置官方文档地址
- java IO 学习
- java匿名内部类
- java多线程目录
- eclipse svn 同步和提交忽略制定某些文件类型和文件夹
- Spring MVC通过CROS协议解决跨域问题
- Spring propertyConfigurer类
- SpringMVC把从Jsp页面传递过来的日期字符串转换成Java日期类型方法
- 【Java】发送激活邮件
- Java technical documents
- Java security
- 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第3版)
- Struts2中action的方法被执行两次
- JAVA:WordCount