properties文件改变不生效的问题

问题描述:

      我原本是用的如下方式:(也是最常见的方式)

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再试试………

 

 

你可能感兴趣的:(JavaEE技术)