文档章节

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

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

 

© 著作权归作者所有

共有 人打赏支持
vshcxl
粉丝 19
博文 278
码字总数 32372
作品 0
浦东
高级程序员
【Canal源码分析】Canal Server的启动和停止过程

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

端木轩 ⋅ 05/24 ⋅ 0

maven打jar包,配置文件没有被打入

今天在给common项目打包的过程中,发现打出的包中(jar文件)不包含.properties文件,我们项目在读取一些配置时,把信息写在了weifutong.properties 文件中,地址为:XXX_common/src/main/j...

小学生学习 ⋅ 04/26 ⋅ 0

LINUX类主机JAVA应用程序占用CPU、内存过高分析手段

转载声明:本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus)。 做为一个IT运维人员,通常在运维过程中会遇到各种各样的问题,系统问...

丁启良 ⋅ 2015/12/04 ⋅ 0

甲骨文开源Java 性能监控调试工具 JMC

JMC (Java Mission Control) 是Oracle开源的Java 性能监控调试工具, 源自 JRockit JVM , 主要由三个组件构成:Java 进程浏览器、JMX 控制台和 Java Flight 记录器。 主要特性: Java 进程浏览...

marsdream ⋅ 05/07 ⋅ 0

重磅!Java 性能监控调试工具 JMC 宣布开源

JRockit JVM 创始人之一、Oracle Java 产品组成员 Marcus Hirt 昨日在其博客上宣布,Java Mission Control(JMC)的源代码已正式开源。 JMC 是源自 JRockit JVM 的一套监控和管理工具,Oracl...

王练 ⋅ 05/07 ⋅ 6

Spring Boot+Profile实现不同环境读取不同配置

文件结构如下: 但是官方推荐放在config文件夹下。 作用: 不同环境的配置设置一个配置文件,例如:dev环境下的配置配置在application-dev.properties中。prod环境下的配置配置在application...

easonjim ⋅ 2017/11/07 ⋅ 0

Common Gui Tools 1.4 发布,Java GUI 实用小工具集

Java GUI实用小工具集 Common Gui Tools 新增:二维码生成解析、时间戳转换、Json格式化、文本文件切分等。 Common Gui Tools 是用java编写,GUI界面的实用小工具集,1.4版有20个小工具: 1,...

bs2004 ⋅ 04/22 ⋅ 0

JVM性能调优实践——JVM篇

前言 在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践...

lijingyao8206 ⋅ 05/24 ⋅ 0

基于可靠消息方案的分布式事务(二):Java中的事务

前言:在上一篇文章 基于可靠消息方案的分布式事务:Lottor介绍 中介绍了常见的分布式事务的解决方案以及笔者基于可靠消息方案实现的分布式事务组件Lottor的原理,并展示了应用的控制台管理。...

aoho ⋅ 06/01 ⋅ 0

Spring Boot - Profile配置

Profile是什么 Profile我也找不出合适的中文来定义,简单来说,Profile就是Spring Boot可以对不同环境或者指令来读取不同的配置文件。 Profile使用 假如有开发、测试、生产三个不同的环境,需...

Java技术栈 ⋅ 06/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring Email

一、普通邮件 maven依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.2.6.RELEASE</version>......

BobwithB ⋅ 13分钟前 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 16分钟前 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 17分钟前 ⋅ 0

IT行业的变革就像世界杯德国对战墨西哥一样难以预测[图]

最近在观看世界杯,尤其是昨天的比赛,上一届卫冕冠军德国队居然0:1告负墨西哥,这创造了历史,首先是墨西哥从来没赢过德国队,其次是德国队36年来首站没输过,再差也是打平,而这次,德国队...

原创小博客 ⋅ 36分钟前 ⋅ 0

解决CentOS6、7,/etc/sysconfig/下没有iptables的问题

一、Centos 6版本解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptables服务进行保存: service iptables save 3.重启iptables服务: service ...

寰宇01 ⋅ 46分钟前 ⋅ 2

数据库备份和恢复

备份:mysqldump -u root -p 数据库>磁盘路径 恢复:mysql -u root -p 数据库<sql脚本的磁盘路径

anlve ⋅ 今天 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部