每月重新加载一次servlet

如何每月重新加载一次servlet?

我们得到的一些数据会每月更改一次,数据是针对servlet的,但是我们不需要将数据保存到DB中,而是我们想让它成为一个配置文件,每月更换一次,怎么能我这样做?

我知道servlet的生命周期策略是由容器控制的,我使用的是websphere 7,但我不知道是否有办法在websphere中配置它。

调用destory()方法会影响servlet的运行实例吗? AFAIK,servlet是multithreading的。

不要使用servlet来存储数据。 而是将数据存储为ServletContext的属性。 您可以借助ServletContextListener 。 在ScheduledExecutorService帮助下,也可以使用相同的侦听器类以定时间隔重新加载数据。

这是一个启动示例:

 public class Config implements ServletContextListener { private ScheduledExecutorService scheduler; @Override public void contextInitialized(ServletContextEvent event) { Data data = new Data(); event.getServletContext().setAttribute("data", data); scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(new Reloader(data), 0, 30, TimeUnit.DAYS); } @Override public void contextDestroyed(ServletContextEvent event) { scheduler.shutdownNow(); } } 

(请注意,没有TimeUnit.MONTH ,所以这是“每月一次”最好的)

Reloader类看起来像这样:

 public class Reloader implements Runnable { private Data data; public Reloader(Data data) { this.data = data; } @Override public void run() { data.reload(); } } 

/WEB-INF/web.xml注册侦听器后,如下所示

  com.example.Config  

它将创建Data实例和每30天执行data.reload()单线程调度程序,您可以按如下方式访问每个servlet中的Data实例:

 Data data = (Data) getServletContext().getAttribute("data"); 

在JSP中如下:

 ${data}