`
lvinie
  • 浏览: 110949 次
  • 性别: 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;
			}
		}
	}

}
 
分享到:
评论

相关推荐

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

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

    ssm必备架包配置文件带详尽注解

    ssm必备架包以及配置文件带详尽注解,包括逆向工程代码,从此你在不用到处找架包,到处找配置文件头啦。

    一个开源的Java基础工具包

    一、数据库工具类 1、com.baijob.commonTools.db.ds C3p0Ds 和 DruidDs分别是两种连接池的实现,依赖于数据库配置文件,配置文件的样例参考config/db-example.setting 使用时将db-example.setting复制于${...

    JavaBean实体类 配置文件 代码一键自动生成工具

    代码一键自动生成工具 可生成Action、JavaBean实体类、Dao及实现类、service及实现类、spring.xml、struts.xml、mybatis.xml *该工具目前支持3种数据源的生成方式,分别是:JDBC、.table、PDM *JDBC:选择JDBC是只...

    config4j

    一个XML工具类,一个系统工具类,一个结点对象,一个BUILDER,如此而已,我就不信这个小东西对于经常读取XML配置文件的人来说不能提供方便? 大家有心情试试看,提供源码和DEMO! 目前是1.0版本,本人将不...

    word源码java-javaUtils-:java常用的工具类,附带Springboot配置属性目录

    工作中实用的Java工具类整理 config 多数据源的配置及动态切换数据库的切面配置(还未完善好,配置文件暂上传) database JedisUtil(redis连接操作实现) encrypt RsaUtils(rsa加密Java实现) http http.async ...

    ini配置文件读写(C/C++版本)

    本工具功能为读取ini配置文件中的配置项,包含有样例程序,编译脚本,如需自编译验证,可在安装有G++4.4.7以上版本的linux环境下直接运行makefile(命令make),即可生成可执行文件parse 运行样例见本说明第四...

    字符串文件http密码资源文件openoffice图片等工具等

    工具类包 Assert提供对数组、集合、字符串的合法校验静态方法 BeanHelper提供了bean类与map的互相转换 PropertiesUtil实现对properties文件的读与写,参数文件名不包括.properties SysConfig实现对指定系统资源文件...

    Java课程设计推箱子小游戏,附完整素材、源码和报告模板

    4. Utils.java:工具类用于游戏主体判断是否存在地图文件 5. UpdateThread.java:刷线面板类,继承Thread。每0.01秒刷新面板一次。其中10为10ms(毫秒) 6. MainGame.java:游戏主体类继承JFrame同时实现MapConfig...

    数据库迁移

    数据库迁移的工具类,需要jdk1.8。 用作数据库里的数据迁移,需要在数据转移前,两边数据库的表结构一致(提前创建好数据库表),保证从一边读取出来的数据能够正常插入另一边。数据迁移时 按照数据插入顺序来读取,...

    JAVA源码 代码一键自动生成工具

    代码一键自动生成工具 可生成Action、JavaBean实体类、Dao及实现类、service及实现类、spring.xml、struts.xml、mybatis.xml *该工具目前支持3种数据源的生成方式,分别是:JDBC、.table、PDM *JDBC:选择JDBC是只...

    java6.0源码-dataminer:Maas平台的数据提取工具

    Maas平台的数据提取工具。 数据挖掘器由三个主要部分组成: 一个核心:受 Swing 和 Spring 框架的启发,它管理应用程序的生命周期。 具体而言,它负责: 读取 config.properties 文件并将其用作其基本配置 读取 ...

    Android_CameraAndGallery:7.0及以上系统(向下兼容6.0)拍照、读取系统相册、裁剪图片

    Android_UseCameraAndGallery 7.0及以上系统(向下兼容6.0)拍照、读取系统相册、裁剪 ... * 4、PhotoUtils工具类对拍照和相册获取照片的封装 * 5、自定义圆形头像CircleImageView * 6、BuildConfig

    Python+appium框架原生代码实现App自动化测试详解

    step1:首先介绍下python+appium的框架结构,如下截图所示 (1):apk目录主要放置待测app的apk资源; (2):config目录主要放置配置文件信息,包含:数据库连接配置...读取config配置文件中元素信息的工具类方法;日志类

    批量发工资条小工具

    如果要修改此工资条格式,可参照附件压缩包中自带的“工资条格式.xls”(如果你的excel文件中有多张表,软件默认读取最左边的第一张excel表,可在config.ini中修改成读其它张表)。 可以增加列或删减列,但需确保工资...

    webutil:一些网络工具

    WebUtil(常用web工具类) java,java web日常开发中经常用到一些工具, 网上找的往往并不适合, 需要自己的改进。 为此,封装一些常用工具非常必要。 常用工具类列表: name function json json处理工具类 xml ...

    mybatis-generator-spring-cloud-maven-plugin:这个Maven插件专门用于在由spring-cloud-config配置的数据源上为Mybatis生成代码。

    而对于“针对项目进行代码生成”等操作更适合设计成“工具”来使用,所以相比起零散的代码类,独立的jar包等方式,还不如能集成进项目又能独立使用的maven插件来得合适。故本插件内部封装了“mybatis-generator-...

    基于python实现的linux后台日志监控小项目+源代码+文档说明

    |--util.py (工具类) |--run.py (程序入口) 相关文章链接 -------- 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内...

    MybatisHandBook:MyBatis从入门到精通原始码-源码通

    通过资源工具类将mybatis-config.xml配置文件读入Reader。 再通过SqlSessionFactoryBuilder构造类使用阅读器创建SqlSessionFactory工厂对象。在创建SqlSessionFactory对象的过程中,首先解析mybatis-config.xml配置...

    leetcode下载-SSM-Examples:SSM-示例

    config-helper,配置文件读取工具类,使用注解的方式,类型安全 hibernate—examples,从原生jdbc到hibernate集成 mybatis-examples,从原生jdbc到MyBatis集成 spring-satic-resource-examples,使用Spring Mvc对...

Global site tag (gtag.js) - Google Analytics