java - 如何在文本文件更改时重新初始化 java servlet

标签 java servlets cron reload

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

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

请就如何着手实现上述两种方法中的任何一种提出建议。

谢谢。

最佳答案

不要将其作为 servlet 的实例变量。创建 ServletContextListener它将它存储在应用程序范围内并运行一个线程,该线程在 ScheduledExecutorService 的帮助下在每个时间间隔更新它.

例如

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

}

有了这个可运行的

public class Reloader implements Runnable {

    private Data data;

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

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

}

它可以通过一个随机的 servlet 访问。

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

甚至在随机的 JSP 中。

${data.something}

关于java - 如何在文本文件更改时重新初始化 java servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428130/

相关文章:

linux - cron 任务的 bash 脚本

linux - 如何每 5 小时运行一次 cron 作业

java - 格式化日期以用于 Java 中的文本到语音转换

Java xpath内存泄漏?

java - 使用现有的 Servlet 类或 JSP - Servlet 列表为空

java - 通过 JSTL 打印 JSP 页面中 Servlet 设置的 session 范围属性

java - 使用 RabbitMQ/ActiveMQ 的自定义消息?

java - 如何将文件写入 Android SD 卡并在 PC 上可见

java - Spring MVC 应用程序中的性能

php - Cronjobs 不执行 php 脚本,没有收到 mailto 警告!