您的位置:首页 > 编程语言 > Java开发

Java动态加载配置文件

2017-07-05 11:17 218 查看
  今天无意间在项目的代码中看到如下这样一段简单加载配置文件的代码:

Properties prop = new Properties();
InputStream in = PropertiesTest.class.getClassLoader().getResourceAsStream("/config.properties");
prop.load(in);


  其实代码本身是没有什么问题的。问题就是用这种方式来读取配置文件,会存在属性文件的缓存问题。

  什么意思呢?就是当系统在运行过程中第一次执行这段代码的时候,会将config.properties这个配置文件的信息保存在缓存当中,进而再次执行该段代码时候会从缓存当中读取,而不是再次读取config.properties配置文件。

  换句话来讲,当系统在运行时,我们去修改配置文件的相应信息,此时配置文件不会立即生效除非重启系统程序。所以这样操作比较繁琐,尤其是在配置文件修改频繁的情况下。所以让Java动态的加载配置文件是很有必要的。

  以下是我粗糙修改后动态加载配置文件的代码:

Properties prop = new Properties();
String path = Thread.currentThread().getContextClassLoader().getResource("config.properties").getPath();
path = URLDecoder.decode(path, "UTF-8");
FileInputStream in = new FileInputStream(path);
prop.load(in);


  用这种方法来获取配置文件的绝对路径,再以流的形式读取配置文件传入,避免了上述配置文件缓存的问题,能实现配置文件的动态加载。我们在程序运行的过程当中修改配置文件相应信息,程序再次执行会直接读取生效。

path = URLDecoder.decode(path, "UTF-8");


至于上面这句代码,是我后来添加的,主要是用来转换文件路径,避免空格的问题。若不用这句代码对路径进行转换,获取的文件路径当中会包含空格,且路径的空格会被替代为‘%20’,这样直接读取会导致系统找不到文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: