文档章节

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

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

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

T-newcomer
2017/10/21
0
0
基于Java Properties类设置本地配置文件

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

HM巧克力酱
08/22
0
0
Mybatis 关键组件(注意各组件的最佳作用域)

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

xd03122049
07/22
0
0
java读取Properties属性文件的方法

Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件,用来配置应用程序的一些信息,通过键值对的形式来保存。 一、通过spring的形式读取 1、spring配置文件: ...

南的糊途
2013/03/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

oh-my-zsh 自定义

GitHub 地址 基于 oh-my-zsh 的自定义配置,增加了一些个人常用插件与皮肤。 采用的是 git submodule 来维护,包括 oh-my-zsh,之所以这么搞,主要是手头有多台 linux 需要维护, 每台机器、...

郁也风
今天
4
0
Docker安装踩坑:E_FAIL 0x80004005的解决

参考 菜鸟教程--Windows Docker 安装 http://www.runoob.com/docker/windows-docker-install.html 官方文档-Install Docker Toolbox on Windows https://docs.docker.com/toolbox/toolbox_in......

karma123
今天
5
0
js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0
"errcode": 41001, "errmsg": "access_token missing hint: [w.ILza05728877!]"

Postman获取微信小程序码的时候报错, errcode: 41001, errmsg: access_token missing hint 查看小程序开发api指南,原来access_token是直接当作parameter的(写在url之后),scene参数一定要...

两广总督bogang
昨天
33
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部