java不重启服务动态加载properties文件

动态加载properties文件内容,不需要重启服务!

1 、Maven 工程,在resource下新建一个properties文件

target/classes/config.properties

user=dufy
phoneNo=123456789

2、新建解析properties文件的工具类

package com.dufy.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.Properties;

/**
 * 
 *
 * @author:dufyun
 * @version:1.0.0
 * @date 2017/11/16
 * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
 */
public class PropertiesUtil {

    private static Logger log = LoggerFactory.getLogger(PropertiesUtil.class);

    private static final String CONFIG_NAME = "config.properties";

    private static Properties prop;

    private static Long lastModified = 0L;

    /**
     * 初始化加载配置文件
     */
    private static void init() {
        prop = new Properties();
        String filepath = PropertiesUtil.class.getClassLoader().getResource(CONFIG_NAME).getPath();
        log.info(filepath);
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(filepath);
            prop.load(fis);
        } catch (IOException e) {
            log.error(CONFIG_NAME +"载入系统路径资源文件错误!");
            e.printStackTrace();
        }finally {
            try {
                if(fis != null){
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 判断配置文件是否改动
     * @return returnValue :true:改动过 ,false:没有改动过
     */
    private static boolean isPropertiesModified() {
        boolean returnValue = false;
        File file = new File(PropertiesUtil.class.getClassLoader().getResource(CONFIG_NAME).getPath());
        if (file.lastModified() > lastModified) {
            log.info("修改CONFIG_NAME:{} 配置文件",CONFIG_NAME);
            lastModified=file.lastModified();
            returnValue = true;
        }
        return returnValue;
    }

    /**
     * 根据key获取配置文件中的值
     * @param key key值
     * @return 返回value
     */
    private static String getPropertyValue(String key) {

        if (prop == null || isPropertiesModified()) {
            init();
        }
        String value = prop.get(key).toString();
        log.info("根据key获取value值, key:{} ,value:{}",key,value);
        return value;
    }

    /**
     * 获取配置文件中所有的value值
     * @return 所有配置的value值
     */
    private static String getPropertyAllValue() {

        if (prop == null || isPropertiesModified()) {
            init();
        }
        Collection<Object> values = prop.values();
        log.info("CONFIG_NAME :{},配置的所有的values:{}",CONFIG_NAME,values.toString());
        return values.toString();
    }

    /**
     * 验证登录的手机号是否为测试手机号
     * @param phoneNo 登录手机号
     * @return true: 是测试账户, false:不是测试账户
     */
    public static boolean validateLoginNo(String phoneNo){
        boolean flag = false;
        String allValue = getPropertyAllValue();
        if(allValue.contains(phoneNo)){
            flag = true;
        }
        return flag;
    }

    public static void main(String[] args) {
        while (true){
            try {
                Thread.sleep(2000);
                System.out.println("validateLoginNo :  " +  validateLoginNo("123456789"));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }

}

3、测试代码

  public static void main(String[] args) {
        while (true){
            try {
                Thread.sleep(2000);
                System.out.println("validateLoginNo :  " +  validateLoginNo("123456789"));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }

启动服务,然后控制台打印
validateLoginNo : true;

然后在服务运行中,修改下面内容!

/target/classes/config.properties
phoneNo=987654321

validateLoginNo :  true
16:22:43.652 [main] INFO  c.s.m.l.c.c.util.PropertiesUtil - 修改CONFIG_NAME:config.properties 配置文件
16:22:43.653 [main] INFO  c.s.m.l.c.c.util.PropertiesUtil - CONFIG_NAME :config.properties,配置的所有的values:[987654321]
validateLoginNo :  false


如果您觉得这篇博文对你有帮助,请点个赞,谢谢!


如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页http://blog.csdn.net/u010648555

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值