2011-06-02 98 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

相關問題