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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Servlet可以通过以下步骤读取properties文件: 1. 在Servlet中获取properties文件的路径。 2. 创建一个Properties对象。 3. 使用Properties对象的load()方法加载properties文件。 4. 使用Properties对象的getProperty()方法获取properties文件中的属性。 例如,以下是一个读取properties文件的Servlet示例: ``` import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/read-properties") public class ReadPropertiesServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取properties文件的路径 String propertiesPath = "/config.properties"; // 创建一个Properties对象 Properties props = new Properties(); // 使用ClassLoader加载properties配置文件生成对应的输入流 InputStream in = this.getClass().getResourceAsStream(propertiesPath); // 使用Properties对象加载输入流 props.load(in); // 获取properties文件中的属性 String username = props.getProperty("username"); String password = props.getProperty("password"); // 输出属性 response.getWriter().println("username: " + username); response.getWriter().println("password: " + password); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ``` 在上面的示例中,我们首先获取了properties文件的路径,然后创建了一个Properties对象,并使用load()方法加载properties文件。最后,我们使用getProperty()方法获取了properties文件中的属性,并将其输出到了响应中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值