Как повторно инициализировать сервлет Java при изменении текстового файла - PullRequest
3 голосов
/ 25 марта 2011

У меня есть сервлет, который извлекает данные из текстового файла во время инициализации.Теперь я обновляю этот текстовый файл заданием cron (скажем, каждый день в 10 утра) и хочу повторно инициализировать сервлет каждый раз, когда этот конкретный файл изменяется.

Второй подход, который я могу использовать, - это синхронизировать повторную инициализацию сервлета вмоя работа cron.

Пожалуйста, подскажите, как реализовать один из двух вышеуказанных подходов.

спасибо.

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

Не используйте его как переменную экземпляра сервлета. Создайте ServletContextListener, который сохраняет его в области приложения и запускает поток, который обновляет его через каждый интервал с помощью ScheduledExecutorService.

1009 * Е.Г. *

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

}

Доступен случайный сервлет.

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

И даже в случайной JSP.

${data.something}
1 голос
/ 25 марта 2011

Ваш сервлет время от времени проверяет файл на наличие изменений с помощью таймера.

Google "Файл монитора Java для изменений" представит множество примеров, один из которых вы можете найти здесь: http://www.devdaily.com/java/jwarehouse/jforum/src/net/jforum/util/FileMonitor.java.shtml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...