大家好,又见面了,我是全栈君。
动态加载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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121123.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...