2011-06-02 99 views
1

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

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

回答

0

通过编程可以trgger一个服务,将刷新这些类与新文件

0

不知道是否有一个内置的资源监听器,但它是相当简单的,开始一个新的线程,监视文件中的文件系统(例如上次更新的日期/时间),如果更改了类,则刷新它们。

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(); 
     } 

    } 
} 
} 

上面的代码只是一个模板

+0

你应该比'TimerTask'更喜欢'ScheduledExecutorService'。另见http://stackoverflow.com/questions/409932/java-timer-vs-executorservice和http://stackoverflow.com/questions/5798688/reload-servlet-once-a-month。或者当您在具有EJB容器的Java EE 6上时,更喜欢'@ Singleton'和'@ Schedule'。另见http://stackoverflow.com/questions/5357033/background-timer-task-in-jsp-web-application。 – BalusC 2011-06-02 14:33:54

相关问题