import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import org.apache.log4j.Logger;
/**
* 负责提取配置文件信息,并监测配置文件的改动
*
* @author lvlj
* @datetime 2008-6-4 上午11:50:41
*/
public class ConfigUtil {
public final static String CONFIG_FILE = "/config.properties";
private static long lastModified = 0L;
private static File configFile = null;
private static Logger log = Logger.getLogger(ConfigUtil.class);
private static Properties props = new Properties();
static {
loadProperty();
}
/**
* 从配置文件中读取所有的属性
*/
private static void loadProperty() {
try {
System.out.println(ConfigUtil.class.getResource(CONFIG_FILE).getPath());
String path = ConfigUtil.class.getResource(CONFIG_FILE).getFile();
if (System.getProperty("os.name").startsWith("Windows")) {
path = path.substring(1);
path = path.replaceAll("%20", " ");
}
File f = new File(path);
lastModified = f.lastModified();
configFile = f;
log.info("load config from: " + f.getAbsolutePath());
props.load(new FileInputStream(f));
//(new ReloadThread()).start();
} catch (Exception e) {
log.error("load config falied!", e);
System.exit(-1);
}
}
/**
* 检测config文件是否被改动,改动后立即更新
*/
private static void checkUpdate() {
if (configFile != null) {
long m = configFile.lastModified();
if (m != lastModified) {
lastModified = m;
try {
Properties prop = new Properties();
prop.load(new FileInputStream(configFile));
props = prop;
log.info("reload config file:" + configFile.getAbsolutePath());
} catch (Exception e) {
log.error("failed to reload config file: " + configFile.getAbsolutePath(), e);
}
}
}
}
/**
* 根据属性名获得对应值,如果得不到值返回defaultValue
*/
public static String getConfig(String name, String defaultValue) {
checkUpdate();
String ret = props.getProperty(name, defaultValue);
if (ret == null) {
return defaultValue;
} else {
return ret.trim();
}
}
public static String getConfig(String name) {
return getConfig(name, null);
}
/**
* 检测config文件是否被改动的线程,每5秒检测一次
*/
static class ReloadThread extends Thread {
public void run() {
log.info("update checking for config file: " + configFile.getAbsolutePath());
while (true) {
System.out.println("dfghjkllkjhgfdfghj");
if (configFile != null) {
long m = configFile.lastModified();
if (m != lastModified) {
lastModified = m;
try {
Properties prop = new Properties();
prop.load(new FileInputStream(configFile));
props = prop;
log.info("config file changed, reload: " + configFile.getAbsolutePath());
} catch (Exception e) {
log.error("failed to reload config file: " + configFile.getAbsolutePath(), e);
}
}
try {
Thread.sleep(5000);
} catch (Exception e) {
log.error("", e);
}
} else
break;
}
}
}
}
分享到:
相关推荐
这个"读取properties文件工具类"是为了简化程序中对`.properties`文件的读取操作而设计的。通过这样的工具类,开发者可以方便地加载和获取配置文件中的属性值,避免重复编写相同的代码。下面我们将详细探讨`...
为了方便地读取和解析这些配置文件,通常会创建一个工具类来封装操作。下面,我们将深入探讨如何在Java中实现一个YAML文件读取工具类,并介绍相关的技术点。 首先,我们需要引入一个能够处理YAML文件的库。在Java中...
本压缩包包含两个工具类,分别用于读取`.yml`和`.properties`格式的配置文件,这两种格式都是Java开发中常见的配置文件类型。 首先,我们来看`.properties`配置文件。这种格式的文件历史较为悠久,它的语法简单,每...
"读取Properties信息工具类"是指一个自定义的Java类,它封装了与Properties文件交互的过程,通常包括加载、获取和更新属性值等操作。这样的工具类能够使代码更具有可维护性和复用性,避免在多个地方重复处理...
【第三方config工具类】在软件开发中,常常需要与外部服务进行交互,获取或发送数据。这个场景下,我们可能会创建一个配置工具类,用于封装HTTP请求操作,以简化代码并提高可复用性。例如,提供的代码片段展示了一个...
总的来说,理解和掌握Java中资源文件的读取方法以及如何使用自定义工具类处理这些文件,对于提升代码的可维护性和可扩展性具有重要意义。通过`KeyValueUtils.java`和`KeyValue.java`,我们可以有效地管理和操作键值...
本篇文章将探讨如何设计一个`properties`读取工具类,以便高效、灵活地从这些文件中读取和管理配置参数。 首先,我们需要创建一个`PropertiesUtil`类,它将包含读取`properties`文件的核心方法。这个工具类通常会有...
这些给定的文件名表明它们是Java编程语言中的工具类,用于处理XML配置文件的读取和管理。以下是对这些类可能包含的功能的详细解释: 1. **PortalConfig.java**:这个类可能专门用于处理与门户应用相关的配置信息。...
本文将详细介绍如何使用JSch进行SFTP操作,并提供一个简单的`SftpUtil`工具类示例。 首先,我们需要了解SFTP的基本概念。SFTP是一种在不安全的网络上安全传输文件的协议,它基于SSH(Secure Shell)协议,提供了...
Spring Boot工具类静态属性注入及多环境配置详解 Spring Boot工具类静态属性注入是指使用Spring Boot框架时,如何将配置信息注入到工具类的静态变量中,以便在程序中使用这些配置信息。这种方式可以方便地在不同的...
标题 "Ef demo 及读取app.config.zip" 涉及到的是使用Entity Framework(简称EF)进行数据库操作的一个演示项目,以及如何通过修改`app.config`文件来配置数据库连接。Entity Framework是.NET Framework中一个强大的...
5. **Config**: 配置管理工具类用于读取、写入和管理应用程序的配置文件,如XML、JSON或.NET的app.config。开发者可以通过这些工具方便地获取或设置配置项,而无需直接操作文件。 6. **Enums**: 枚举工具类通常包含...
5. **图片工具**: 图片工具类主要用于处理图像文件,可能包括读取、写入、缩放、裁剪、转换图像格式等功能。它们可以帮助开发者在C#应用程序中实现图像处理的需求,如创建缩略图、水印或者处理用户上传的图片。 6. ...
在C#代码中,可以通过System.Configuration命名空间提供的ConfigurationManager类来读取这些配置信息。例如: ```csharp string ip = ConfigurationManager.AppSettings["IP"]; string port = ConfigurationManager...
总的来说,理解和掌握Asp.Net 2.0中配置文件`web.config`的读取、修改和新增,以及使用`System.Configuration`命名空间中的工具,对于高效开发和管理应用程序至关重要。通过编写自定义的辅助类,如`ReadWriteConfig....
通过提供的DEMO和源码,开发者可以深入了解config4j 的工作原理和具体用法,以便更好地在自己的项目中集成和利用这一工具。博客链接(https://otom31.iteye.com/blog/200301)也提供了详细的教程和示例,可以帮助...
这个“mybatis自动生成工具类”正是为了解决这个问题,它简化了手动编写这些重复性工作,只需要更改数据库表名,即可快速生成对应的数据访问层代码。 首先,我们要理解 MyBatis 代码生成器的工作原理。它主要通过...
标题提到的"解析yml、yaml的工具类库文件"是关于处理YAML格式文件的软件组件,这种工具库在开发过程中非常实用,特别是对于需要处理配置信息或者进行数据交换的项目。 描述中提及了"逆向开发解析apktool.yml",这...
private static final String PFILE ="Config.properties"; /** * 对应于属性文件的文件对象变量 */ private File m_file = null; /** * 属性文件的最后修改日期 */ private long m_...