SolveItproblems

SolveITProblems is a project of QFormat.net intellectual club

SolveITProblems это проект интеллектуального клуба QFormat.net

пятница, 1 июля 2011 г.

Периодический запуск определенного метода в веб-приложении

Пишу одно веб-приложение на JSF, OpenFaces с базой MySQL. Встает передо мной обычная вроде бы задача запуска  скрипта  раз в день для проведения определенных вычислений. Получив порцию ругани за то что не может дать такой функционал, MySQL  ушел в сторонку, и я понял что тут выход Java :) . Десктоп приложение мы можем сделать в виде потока и запускать его время от времени или использовать стандартную штуку Timer и TimerTask о которых я уже писал в этом блоге, но тут ситуация маленько другая из-за того что сама программа у нас работает по Веб.
Но все и здесь заканчивается благополучно :) ...

Создаем сервлет, переопределяем в нем метод init() пишем там примерно следующий код:
@Override
    public void init()
    {
long justt = System.currentTimeMillis();
Date firstRun = new Date(justt+5000);
Timer timer = new Timer();
TimerTask task = new TimerTask() {
  public void run() {
      System.out.println("do it know"+new Date());
      
  }
};
timer.scheduleAtFixedRate(task, firstRun, 60*1000);

    }
Каждую минуту наш сервлет будет запускать метод run() класса TimerTask, но наверное у вас уже готов вопрос - а кто будет запускать сервлет в первый раз? Здесь нам помогает web.xml:




Выделенная строка гарантирует первый запуск сервлета. Вот в принципе и все. После того как проект будет запущен напишу в комменте про вопрос который меня волнует - как это будет влиять на оперативку сервера...

Удачи :)

5 комментариев:

  1. Вопрос: Ну и как это влияет на оперативку сервака?

    ОтветитьУдалить
  2. Нормально влияет, запускается один раз и сидит в оперативке. Дальнейшее импользование зависит от того какая собственно задача запустится. Сам механизм безобиден.

    ОтветитьУдалить