`
lvinie
  • 浏览: 114338 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

读取config 工具类

    博客分类:
  • java
io 
阅读更多
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文件工具类"是为了简化程序中对`.properties`文件的读取操作而设计的。通过这样的工具类,开发者可以方便地加载和获取配置文件中的属性值,避免重复编写相同的代码。下面我们将详细探讨`...

    读取yml文件工具类.zip

    为了方便地读取和解析这些配置文件,通常会创建一个工具类来封装操作。下面,我们将深入探讨如何在Java中实现一个YAML文件读取工具类,并介绍相关的技术点。 首先,我们需要引入一个能够处理YAML文件的库。在Java中...

    读取配置文件工具类.rar

    本压缩包包含两个工具类,分别用于读取`.yml`和`.properties`格式的配置文件,这两种格式都是Java开发中常见的配置文件类型。 首先,我们来看`.properties`配置文件。这种格式的文件历史较为悠久,它的语法简单,每...

    读取Properties信息工具类

    "读取Properties信息工具类"是指一个自定义的Java类,它封装了与Properties文件交互的过程,通常包括加载、获取和更新属性值等操作。这样的工具类能够使代码更具有可维护性和复用性,避免在多个地方重复处理...

    第三方config工具类

    【第三方config工具类】在软件开发中,常常需要与外部服务进行交互,获取或发送数据。这个场景下,我们可能会创建一个配置工具类,用于封装HTTP请求操作,以简化代码并提高可复用性。例如,提供的代码片段展示了一个...

    读取资源文件工具类

    总的来说,理解和掌握Java中资源文件的读取方法以及如何使用自定义工具类处理这些文件,对于提升代码的可维护性和可扩展性具有重要意义。通过`KeyValueUtils.java`和`KeyValue.java`,我们可以有效地管理和操作键值...

    properties读取工具类设计

    本篇文章将探讨如何设计一个`properties`读取工具类,以便高效、灵活地从这些文件中读取和管理配置参数。 首先,我们需要创建一个`PropertiesUtil`类,它将包含读取`properties`文件的核心方法。这个工具类通常会有...

    xml文件的配置读取工具类

    这些给定的文件名表明它们是Java编程语言中的工具类,用于处理XML配置文件的读取和管理。以下是对这些类可能包含的功能的详细解释: 1. **PortalConfig.java**:这个类可能专门用于处理与门户应用相关的配置信息。...

    java操作sftp的工具类(JSch)

    本文将详细介绍如何使用JSch进行SFTP操作,并提供一个简单的`SftpUtil`工具类示例。 首先,我们需要了解SFTP的基本概念。SFTP是一种在不安全的网络上安全传输文件的协议,它基于SSH(Secure Shell)协议,提供了...

    Spring boot工具类静态属性注入及多环境配置详解

    Spring Boot工具类静态属性注入及多环境配置详解 Spring Boot工具类静态属性注入是指使用Spring Boot框架时,如何将配置信息注入到工具类的静态变量中,以便在程序中使用这些配置信息。这种方式可以方便地在不同的...

    Ef demo 及读取app.config.zip

    标题 "Ef demo 及读取app.config.zip" 涉及到的是使用Entity Framework(简称EF)进行数据库操作的一个演示项目,以及如何通过修改`app.config`文件来配置数据库连接。Entity Framework是.NET Framework中一个强大的...

    C# Util 实用工具类

    5. **Config**: 配置管理工具类用于读取、写入和管理应用程序的配置文件,如XML、JSON或.NET的app.config。开发者可以通过这些工具方便地获取或设置配置项,而无需直接操作文件。 6. **Enums**: 枚举工具类通常包含...

    C# 常用工具类 日志操作(log4net) 配置管理、字符串工具、DateTime工具、图片工具、文件工具、加密工具 等

    5. **图片工具**: 图片工具类主要用于处理图像文件,可能包括读取、写入、缩放、裁剪、转换图像格式等功能。它们可以帮助开发者在C#应用程序中实现图像处理的需求,如创建缩略图、水印或者处理用户上传的图片。 6. ...

    C#读取web.config配置,建立高速缓存机制

    在C#代码中,可以通过System.Configuration命名空间提供的ConfigurationManager类来读取这些配置信息。例如: ```csharp string ip = ConfigurationManager.AppSettings["IP"]; string port = ConfigurationManager...

    Asp.Net2.0读取-修改-新增(配置文件web.config)

    总的来说,理解和掌握Asp.Net 2.0中配置文件`web.config`的读取、修改和新增,以及使用`System.Configuration`命名空间中的工具,对于高效开发和管理应用程序至关重要。通过编写自定义的辅助类,如`ReadWriteConfig....

    config4j 用于简化XML配置文件读取的

    通过提供的DEMO和源码,开发者可以深入了解config4j 的工作原理和具体用法,以便更好地在自己的项目中集成和利用这一工具。博客链接(https://otom31.iteye.com/blog/200301)也提供了详细的教程和示例,可以帮助...

    mybatis自动生成工具类

    这个“mybatis自动生成工具类”正是为了解决这个问题,它简化了手动编写这些重复性工作,只需要更改数据库表名,即可快速生成对应的数据访问层代码。 首先,我们要理解 MyBatis 代码生成器的工作原理。它主要通过...

    解析yml、yaml的工具类库文件

    标题提到的"解析yml、yaml的工具类库文件"是关于处理YAML格式文件的软件组件,这种工具库在开发过程中非常实用,特别是对于需要处理配置信息或者进行数据交换的项目。 描述中提及了"逆向开发解析apktool.yml",这...

    Java读取资源文件工具类--ReadConfigation(java源码)

    private static final String PFILE ="Config.properties"; /** * 对应于属性文件的文件对象变量 */ private File m_file = null; /** * 属性文件的最后修改日期 */ private long m_...

Global site tag (gtag.js) - Google Analytics