我有一个在tomcat6中运行的应用程序,它在启动时读取资源文件(一个简单的文本文件,没有xml)来配置/实例化某些类。现在我希望能够修改该文件,并且无需重新启动服务器即可在应用程序中反映更改。有没有办法做到这一点?
基本上,如果我可以定义并附加一个监听器到该资源,那就是我所需要的。
答案 0 :(得分:1)
答案 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();
}
}
}
}
以上代码只是一个模板