博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java实现动态加载读取properties文件
阅读量:5995 次
发布时间:2019-06-20

本文共 838 字,大约阅读时间需要 2 分钟。

问题: 当我们使用如下语句加载.properties时:

 

ClassLoader classLoader = this.getClass().getClassLoader();Properties prop = new Properties();prop.load(classLoader.getResourceAsStream("/Application.properties"));

 

  

会发现修改了.properties后,即使重新执行,读入的仍为修改前的参数。此问题的原因在于ClassLoader.getResourceAsStream读入后,会将.properties保存在缓存中,重新执行时会从缓存中读取,而不是再次读取.properties文件。

解决

 

Properties prop = new Properties();InputStream is = new FileInputStream(绝对路径);prop.load(is);  

此时,FileInputStream不会将.properties保存在缓存中,即可以解决此问题。但另外让人困惑的 一个问题会产生,即绝对路径,会导致程序的通用性不好。这个问题是由于ClassLoader.getResourceAsStream是直接寻找 classes下的文件,FileInputStream则需要用完整的绝对路径。

完美解决

 

Properties prop = new Properties();String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();InputStream is = new FileInputStream(path + "/VoucherManagement.properties");

 

  

 

此时已无需给出.properties绝对路径,实现动态加载。

转载地址:http://dnqlx.baihongyu.com/

你可能感兴趣的文章
什么是半双工和双工通信
查看>>
ASP.NET页面刷新的实现方法总结
查看>>
夏梦竹谈Hive vs. HBase的区别
查看>>
Ignite用户配置管理介绍
查看>>
PHP精选数组函数
查看>>
用Fine Uploader+ASP.NET MVC实现ajax文件上传[代码示例]
查看>>
Java工具类
查看>>
JS地毯式学习二
查看>>
Struts2学习笔记1
查看>>
自定义String类,并且实现在STL容器中添加自定义的类型
查看>>
GreenDAO - primary key on multiple columns
查看>>
SVN 中trunk、tags、branches使用
查看>>
【BZOJ】1631: [Usaco2007 Feb]Cow Party(dijkstra)
查看>>
Zabbix监控系统深度实践
查看>>
Windows8.1和Ubuntu14.04双系统卸载Ubuntu參考教程[图]
查看>>
EF架构~XMLRepository仓储的实现~续(XAttribute方式)
查看>>
如何修改远程桌面连接端口
查看>>
IOS开发-KVO
查看>>
PLSQL_性能优化系列18_Oracle Explain Plan解析计划通过Baseline绑定
查看>>
java中方法drawImage()的参数详细解释
查看>>