文档章节

java读取系统Properties配置文件利用线程实时监控配置文件变化

vshcxl
 vshcxl
发布于 2016/07/18 11:42
字数 634
阅读 136
收藏 5
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);  
    }  
}  

 

本文转载自:http://www.lai18.com/content/1982071.html

共有 人打赏支持
vshcxl
粉丝 21
博文 283
码字总数 34755
作品 0
浦东
高级程序员
私信 提问
连接池详解,c3p0与dbcp的区别!

连接池: 连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。这项技术能明显提高对数据库操作的性能。 连接池的好处: (1)对于大多数应用程序,当它们正...

IT_laobai
06/20
0
0
基于Java Properties类设置本地配置文件

一、Java Properties类介绍 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,...

HM巧克力酱
08/22
0
0
java基础专栏—Properties

Properties 一个持久的属性集。Properties可以保存在流中或从流中加载,Map中每个键和值都对应字符串 HashTable的子类,Map集合的方法都可以使用,线程安全 该集合没有泛型,且不能写泛型 它...

T-newcomer
2017/10/21
0
0
【Canal源码分析】Canal Server的启动和停止过程

本文主要解析下canal server的启动过程,希望能有所收获。 一、序列图 1.1 启动 1.2 停止 二、源码分析 整个server启动的过程比较复杂,看图难以理解,需要辅以文字说明。 首先程序的入口在C...

端木轩
05/24
0
0
ClassLoader详解及用途

ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回 这个类的class对象。 1.1 几个相关概念ClassLoader负责载入系统的所有Res...

aminqiao
2014/06/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

w, vmstat, top, sar, nload命令查看系统状态信息

w/uptime 查看系统负载 cat /proc/cpuinfo 查看cpu核数 vmstat 监控系统状态,用法 vmstat 1,关键的几列: r, b, swpd, si, so, bi, bo, us, wa top 查看进程使用资源情况 top -c 显示详细的...

野雪球
今天
1
0
小白创建一个spring boot项目

进入 https://start.spring.io/

lilugirl
今天
2
0
Alibaba Java诊断利器Arthas实践--使用redefine排查应用奇怪的日志来源

背景 随着应用越来越复杂,依赖越来越多,日志系统越来越混乱,有时会出现一些奇怪的日志,比如: [] [] [] No credential found 那么怎样排查这些奇怪的日志从哪里打印出来的呢?因为搞不清...

hengyunabc
今天
2
0
home hosts

home hosts lwk@qwfys:~$ cat /etc/hosts127.0.0.1 localhost127.0.1.1 qwfys192.168.56.101vm600.qwfys.com39.108.212.91alpha1.ppy.com39.108.117.122alpha2.p......

qwfys
今天
3
0
大数据教程(6.1)hadoop生态圈介绍及就业前景

1. HADOOP背景介绍 1.1、什么是HADOOP 1.HADOOP是apache旗下的一套开源软件平台 2.HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 3.HADOOP的核心组...

em_aaron
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部