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

动态加载properties文件内容,不需要重启服务!1 、Maven 工程,在resource下新建一个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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121123.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • web开发中前端页面是如何跟后端服务器数据交互的「建议收藏」

    web开发中前端页面是如何跟后端服务器数据交互的「建议收藏」后端服务器一般是指servlet容器,用于执行java源程序常见的网页有html,htm,shtml,asp,aspx,php,jsp等格式前两个常用于静态网页,后面几个常用于动态网页。这里前端网页以比较常见的xx.html和xx.jsp网页作为介绍,其它类似一、静态页面xx.html如何跟后台交互:先来看一个最简单的登陆界面源代码 &lt;body&gt;…

    2022年6月12日
    31
  • 中国软件外包IT公司最新排名

    中国软件外包IT公司最新排名http://cnitcomments.com/companylist/topoutsourcing.htm1.博朗软件Bleum(上海)2.中软国际(北京)3.东软集团Neusoft(沈阳)4.博彦科技BeyondSoft(北京)5.海辉软件HiSoft(大连)6.文思VanceInfo(北京)7.浙大网新Insigma(杭州)8…

    2022年6月9日
    63
  • Flask 框架简单入门

    Flask 框架简单入门Flask框架介绍Flask框架什么是Flask?flask是一种基于python,并且依赖于Jinja2模板引擎(提供网页解析)和WerkzeugWSGI服务(pythonweb应用与web服务之间的接口)的一种微型框架。其中:Jinja2模板引擎:通俗来讲就是服务器接收到用户请求之后,将数据传入HTML文件中后,经过模板引擎的渲染将其呈现在网页中响应给用户。WerkzeugWSGI:pythonweb应用程序是一个被调用的对象,它无法直接与web服务器直接建立联系,所以WS

    2025年11月11日
    4
  • struts2拦截器学习

    struts2拦截器学习一、什么是拦截器?提到拦截器,使我不得不想起武侠剧中劫匪们常说的一句话:“此山是我开,此树是我栽,要打此路过,留下买路财!”。难不成程序中也有“打劫”的,说的没错,拦截器就是个打劫的。在现实生活中,劫匪劫的大都是钱财,当然也有别的什么,那么程序中的“劫匪”劫的又是什么呢?或者说程序中为什么需要它?在我们的日常编程中少不了写一些重复的代码,例如在一个地方中写了一段代码,后来发现这段代码在其

    2022年10月7日
    2
  • 流行计算机病毒有哪些,现在流行计算机病毒有哪些[通俗易懂]

    流行计算机病毒有哪些,现在流行计算机病毒有哪些[通俗易懂]现在流行计算机病毒有哪些现在流行计算机病毒有哪些现在流行的计算机病毒有很多!你有去了解过吗?下面由小编给你做出详细的现在流行计算机病毒介绍!希望对你有帮助!现在流行计算机病毒介绍一:国家计算机病毒应急处理中心通过对互联网的监测发现,近期出现一种恶意后门程序变种Backdoor_Agent.ADG。该变种运行后,会自我复制到受感染操作系统指定文件夹下,重命名为可执行文件。随后,该变种会释放操作系统中…

    2022年5月5日
    66
  • c++overload_override和重载的区别

    c++overload_override和重载的区别重载的含义是什么?重载有哪些?重载方法,重载函数该怎么写?重载的特点是什么?重载的作用是什么?使用重载时应该注意什么?

    2022年10月5日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号