Пишу одно веб-приложение на JSF, OpenFaces с базой MySQL. Встает передо мной обычная вроде бы задача запуска скрипта раз в день для проведения определенных вычислений. Получив порцию ругани за то что не может дать такой функционал, MySQL ушел в сторонку, и я понял что тут выход Java :) . Десктоп приложение мы можем сделать в виде потока и запускать его время от времени или использовать стандартную штуку Timer и TimerTask о которых я уже писал в этом блоге, но тут ситуация маленько другая из-за того что сама программа у нас работает по Веб.
Но все и здесь заканчивается благополучно :) ...
Создаем сервлет, переопределяем в нем метод init() пишем там примерно следующий код:
Выделенная строка гарантирует первый запуск сервлета. Вот в принципе и все. После того как проект будет запущен напишу в комменте про вопрос который меня волнует - как это будет влиять на оперативку сервера...
Удачи :)
Но все и здесь заканчивается благополучно :) ...
Создаем сервлет, переопределяем в нем метод 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:
Выделенная строка гарантирует первый запуск сервлета. Вот в принципе и все. После того как проект будет запущен напишу в комменте про вопрос который меня волнует - как это будет влиять на оперативку сервера...
Удачи :)
Отличное решение!
ОтветитьУдалитьThanks :)
ОтветитьУдалитьСпасибо!!!
ОтветитьУдалитьВопрос: Ну и как это влияет на оперативку сервака?
ОтветитьУдалитьНормально влияет, запускается один раз и сидит в оперативке. Дальнейшее импользование зависит от того какая собственно задача запустится. Сам механизм безобиден.
ОтветитьУдалить