文档章节

解决修改properties 属性文件存在缓存问题,附带操作properties文件工具类

蓝缘Y
 蓝缘Y
发布于 2013/11/11 10:32
字数 578
阅读 814
收藏 7
      在做项目的时候有些数据不一定需要在数据库管理,例如数据库连接,定时任务等等的配置..有时候需要动态修改这些数据,但在修改完后,再次获取时出现问题.

  在项目中要修改properties,修改之后,再进入相关目录查看properties文件,发现内容已经修改了,但是但通过TaskController.class.getResourceAsStream("/config.properties");获取的数据时,还是没有改变前的数据.

   原因是:.getResourceAsStream是通过缓存中获取的.

   解决办法:能过真实路径获取TaskController.class.getResource("/config.properties").getPath();

操作properties文件工具类:

package com.lanyuan.video.util;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Properties;
import java.util.Map.Entry;
import com.lanyuan.video.task.TaskController;

public class PropertiesUtils {
	/**
	 * 获取属性文件的数据 根据key获取值
	 * @param fileName 文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上)
	 * @param key
	 * @return
	 */
	public static String findPropertiesKey(String key) {
		
		try {
			Properties prop = getProperties();
			return prop.getProperty(key);
		} catch (Exception e) {
			return "";
		}
		
	}

	public static void main(String[] args) {
		Properties prop = new Properties();
		InputStream in = TaskController.class
				.getResourceAsStream("/config.properties");
		try {
			prop.load(in);
			Iterator<Entry<Object, Object>> itr = prop.entrySet().iterator();
			while (itr.hasNext()) {
				Entry<Object, Object> e = (Entry<Object, Object>) itr.next();
				System.err.println((e.getKey().toString() + "" + e.getValue()
						.toString()));
			}
		} catch (Exception e) {
			
		}
	}

	/**
	 * 返回 Properties
	 * @param fileName 文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上)
	 * @param 
	 * @return
	 */
	public static Properties getProperties(){
		Properties prop = new Properties();
		String savePath = TaskController.class.getResource("/config.properties").getPath();
		//以下方法读取属性文件会缓存问题
//		InputStream in = TaskController.class
//				.getResourceAsStream("/config.properties");
		try {
			InputStream in =new BufferedInputStream(new FileInputStream(savePath));  
			prop.load(in);
		} catch (Exception e) {
			return null;
		}
		return prop;
	}
	/**
	 * 写入properties信息
	 * 
	 * @param key
	 *            名称
	 * @param value
	 *            值
	 */
	public static void modifyProperties(String key, String value) {
		try {
			// 从输入流中读取属性列表(键和元素对)
			Properties prop = getProperties();
			prop.setProperty(key, value);
			String path = TaskController.class.getResource("/config.properties").getPath();
			FileOutputStream outputFile = new FileOutputStream(path);
			prop.store(outputFile, "modify");
			outputFile.close();
			outputFile.flush();
		} catch (Exception e) {
		}
	}
}

© 著作权归作者所有

蓝缘Y
粉丝 22
博文 6
码字总数 4714
作品 0
广州
私信 提问
加载中

评论(2)

蓝缘Y
蓝缘Y 博主

引用来自“Geek”的评论

好像解决不了问题啊

我是晕样解决的

G
Geek
好像解决不了问题啊
hezui/configMenagement

基于Zookeeper的工程文件管理配置中心 在大型集群和分布式应用中,配置不宜分散到集群结点中,或者工程数量较多管理混乱,这时配置应该集中管理,这个配置中心基于使用简单,功能完善为目标,...

hezui
2015/10/14
0
0
SpringMVC和hibernate工作流程描述

SpringMVC工作流程描述 (1)向服务器发送HTTP请求,请求被前端控制器 DispatcherServlet 捕获。 (2)DispatcherServlet 根据 <servlet-name>-servlet.xml 中的配置对请求的URL进行解析,得...

wdongqiang
2016/04/01
456
0
Java动态加载属性文件.properties

问题:当我们使用如下语句加载.properties时: 会发现修改了.properties后,即使重新执行,读入的仍为修改前的参数。此问题的原因在于ClassLoader.getResourceAsStream读入后,会将.properti...

陶邦仁
2015/04/08
1K
0
spring-boot官方参考文档(使用spring-boot)(2.2)

第七部分:运行你的程序 最大的优势将你的程序打包成一个jar包运行在任何HTTPserver容器中。调试Springboot也非常简单,你不要任何特殊的IDE插件或者扩展。 1:从IDE中运行 你可以在你的IDE...

小飞哥哥
2016/03/08
516
0
一.Properties类与Properties配置文件

Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型。我们要做的第一步就是要将文件读取到...

hello菜bird
2016/01/06
58
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部