欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA Servlet 动态加载配置文件.properties

程序员文章站 2022-06-24 12:57:08
...

JAVA Servlet 可以定义.properties文件对程序进行定义参数,一般为加载Servlet时读取,修改.properties后需要在tomcat里重新加载一 次Servlet以重新读取参数。但有些程序必须一直运行,如充值管理系统,就需要不重新加载Servlet的情况下,进行动态加载配置文 件.properties。
问题:
当我们使用如下语句加载.properties时:
ClassLoader classLoader = this.getClass().getClassLoader();

Properties prop = new Properties();

prop.load(classLoader.getResourceAsStream("/Application.properties"));
会发现修改了.properties后,即使重新执行,读入的仍为修改前的参数。
此问题的原因在于ClassLoader.getResourceAsStream读入后,会将.properties保存在缓存中,重新执行时会从缓存中读取,而不是再次读取.properties文件。
转:http://longfor5.iteye.com/blog/1756077
解决:
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://www.blogardener.com/?p=448