问题描述:
我原本是用的如下方式:(也是最常见的方式)
InputStream is = PropertyFileUtil.class.getClassLoader()
.getResourceAsStream("Config.properties");
如果我改动了Config.properties文件,重新调用上面的代码去获取输入流,则读到的内容还是改动之前的内容。也就是说,上面这种方式对于Config.properties的改动是无效的,
原因是:上面这种方法自带了缓存。如果希望能改变Config.properties时能够重新加载,则可以使用下面的方法:
InputStream is = null;
String fileUrl = ReportConfig.class.getClassLoader()
.getResource("Config.properties").getPath();
fileUrl = fileUrl.replaceAll("%20", " ");
is = new BufferedInputStream(new FileInputStream(fileUrl));
这个方法是按实际路径 用FileInputStream去读取 的,所以能够读取到改动后的Config.properties。
PS:另外我发现一点, 在Websphere服务器上,替换了Config.properties文件,然后再重新读取配置内容,依然获得的是替换之前的内容 ,这就不是缓存的问题了,而是Websphere隐藏了最原始那份Config.properties文件,我们替换时不能将这个原始的版本替换掉(我们替换掉的实际上是只是一个副本)。貌似在Websphere上替换class和properties文件都需要重启服务器才会生效。我哪天把properties文件的后缀伪装成.jsp再试试………
原文 https://blog.csdn.net/zollty/article/details/84326829