java读取系统Properties配置文件利用线程实时监控配置文件变化
博客专区 > vshcxl 的博客 > 博客详情
java读取系统Properties配置文件利用线程实时监控配置文件变化
vshcxl 发表于1年前
java读取系统Properties配置文件利用线程实时监控配置文件变化
  • 发表于 1年前
  • 阅读 120
  • 收藏 5
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

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);  
    }  
}  

 

共有 人打赏支持
粉丝 17
博文 265
码字总数 23603
×
vshcxl
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: