侦听器更改app config / resources文件

时间:2011-06-02 13:12:09

标签: java tomcat servlets

我有一个在tomcat6中运行的应用程序,它在启动时读取资源文件(一个简单的文本文件,没有xml)来配置/实例化某些类。现在我希望能够修改该文件,并且无需重新启动服务器即可在应用程序中反映更改。有没有办法做到这一点?

基本上,如果我可以定义并附加一个监听器到该资源,那就是我所需要的。

4 个答案:

答案 0 :(得分:1)

请尝试以下方法之一:

注意

使用Java 7,Watching a Directory for Changes成为标准API的一部分。

答案 1 :(得分:0)

以编程方式,您可以触发一个服务,该服务将使用新文件刷新这些类

答案 2 :(得分:0)

不确定是否有内置资源侦听器,但启动监视文件系统中文件的新线程(例如,上次更新的日期/时间)并刷新类(如果它已更改)将非常简单

答案 3 :(得分:0)

在网络应用中启动计时器,获取资源文件如下:

在ServletContextListener.contextInitialized(),

package com.servlets;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class WatcherListener
    implements ServletContextListener
{
public void contextInitialized(ServletContextEvent event)
{
    ServletContext servletContext = event.getServletContext();
    Timer timer = new Timer("ResourceListener");
    timer.schedule(new MyWatcherTask(servletContext), 15);
}

public void contextDestroyed(ServletContextEvent event)
{
}

private class MyWatcherTask extends TimerTask
{
    private final ServletContext servletContext;
    private long lastModifiedTime = -1;

    public MyWatcherTask(ServletContext servletContext)
    {
        this.servletContext = servletContext;
    }

    public void run()
    {
        URL resource = null;
        try {
            resource = servletContext.getResource("resouceFileName");
            File resourceFile = new File(resource.toString());
            long current = resourceFile.lastModified();
            if (current > lastModifiedTime) {
                reloadReources();
            }
            lastModifiedTime = current;
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

    }
}
}

以上代码只是一个模板