文档章节

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

vshcxl
 vshcxl
发布于 2016/07/18 11:42
字数 634
阅读 131
收藏 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
博文 282
码字总数 34755
作品 0
浦东
高级程序员
连接池详解,c3p0与dbcp的区别!

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

IT_laobai
06/20
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
Mybatis 关键组件(注意各组件的最佳作用域)

Mybatis 几个使用时的重要组件 SqlSessionFactoryBuilder 这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 实例的最佳作用域...

xd03122049
07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

以太坊总结

一、概念说明 1.以太坊(Ethereum blockchain)由V神(Vitalik Buterin)发明,是一个交易记录的永久数据库,它以一个“无信任”的交易系统来运行,不需要任何第三方信任机构即可进行点对点的...

盼望明天
31分钟前
1
0
Java并发工具类——AtomicInteger

基本类型int的递增等操作并不是线程安全的,加上synchronized又会影响性能,因此在并发情况下我们应该使用AtomicInteger,下面通过一个例子验证一哈。 public class TestAtomicInteger {...

东都大狼狗
33分钟前
1
0
基于CentOS7.2系统对RabbitMQ单机版安装过程

准备虚拟机系统 我的系统如下 系统版本7.2 安装perl yum install perl 安装wget工具 yum install -y wget 安装相关依赖工具 yum install ncurses ncurses-base ncurses-devel ncurses-libs ...

凌晨一点
37分钟前
1
0
Maven常用命令

Maven常用命令 说到命令,则不得不提一下环境变量,在之前的博文中简单提了一下环境变量的配置,这里具体说一下。说完环境变量的配置,然后就是Maven的常用命令,这里说的是常用的几个命令,...

星汉
53分钟前
0
0
Flink操作mysql kafka和hbase

主程序 package com.streaming.flink;import java.util.Properties;import org.apache.flink.api.common.functions.FlatMapFunction;import org.apache.flink.api.common.functi......

守望者之父
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部