如何在文本文件更改时重新初始化java servlet [英] how to re-initialize java servlet on text file change

查看:197
本文介绍了如何在文本文件更改时重新初始化java servlet的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个servlet在初始化期间从文本文件中提取数据。
现在我使用cron作业更新该文本文件(例如每天早上10点),并且希望在每次该特定文件更改时重新初始化servlet。

I have a servlet that pulls data from a text file during initialization. Now I am updating that text file with a cron job(say everyday at 10am) and want to reinitialize the servlet every time this particular file changes.

方法我可以遵循的是将servlet的重新初始化同步到我的cron作业。

Second approach I can follow is to sync the reinitialization of the servlet to my cron job.

请告诉我们如何实现上述两种方法。

Kindly suggest on how to go about implementing either of the above two approaches.

感谢。

推荐答案

不要把它当做实例变量servlet。创建 ServletContextListener 将其存储在应用程序作用域中,并运行一个线程,该线程在 ScheduledExecutorService

Don't get hold of it as instance variable of the servlet. Create a ServletContextListener which stores it in the application scope and runs a thread which updates it on every interval with help of ScheduledExecutorService.

/ p>

E.g.

@WebListener
public class Config implements ServletContextListener {

    private ScheduledExecutorService scheduler;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        Data data = new Data(); // Your class which reads and holds data upon construction.
        event.getServletContext().setAttribute("data", data);
        scheduler = Executors.newSingleThreadScheduledExecutor();
        scheduler.scheduleAtFixedRate(new Reloader(data), 0, 1, TimeUnit.DAYS);
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        scheduler.shutdownNow();
    }

}



with this runnable

public class Reloader implements Runnable {

    private Data data;

    public Reloader(Data data) {
        this.data = data;
    }

    @Override
    public void run() {
        data.reload();
    }

}

它可以访问一个随机的servlet。 / p>

It's accessible a random servlet.

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    Data data = (Data) getServletContext().getAttribute("data");
    // ...
}

甚至在随机JSP中。

And even in a random JSP.

${data.something}

这篇关于如何在文本文件更改时重新初始化java servlet的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆