Можно ли запустить задание cron в веб-приложении? - PullRequest
23 голосов
/ 11 января 2010

В веб-приложении java (servlets / spring mvc), использующем tomcat, возможно ли запустить службу типа задания cron?

например. каждые 15 минут очищайте базу данных журнала.

Можете ли вы сделать это способом, независимым от контейнера, или его нужно запустить с помощью tomcat или какого-либо другого контейнера?

Пожалуйста, укажите, будет ли метод гарантированно запускаться в определенное время или один, который запускается каждые 15 минут, но может быть сброшен и т. Д., Если приложение перезагружается (это так в .net, если вы используете таймеры)

Ответы [ 4 ]

11 голосов
/ 11 января 2010

Как описано в Глава 23. Планирование и объединение потоков , Spring имеет поддержку планирования через классы интеграции для Timer и Кварцевого планировщика (http://www.quartz -scheduler.org / ). Для простых нужд я бы рекомендовал использовать JDK Timer.

Обратите внимание, что планировщики Java обычно используются для запуска Java бизнес-ориентированных заданий . Для задач sysadmin (как пример, который вы привели) вы действительно должны предпочесть cron и традиционные инструменты администратора (bash и т. Д.).

2 голосов
/ 11 января 2010

Если вы используете Spring, вы можете использовать встроенные крючки Quartz или Timer. Смотри http://static.springsource.org/spring/docs/2.5.x/reference/scheduling.html

0 голосов
/ 11 января 2010

Задания ориентированы на пакетную обработку. Либо с помощью ручного триггера, либо в стиле cron (как вы, кажется, хотите).

И все же я не понимаю твоей связи между веб-приложением и работой в стиле cron? Единственный вариант использования веб-приложения, о котором я могу подумать, это то, что вы хотите иметь конечную точку HTTP для запуска задания (но это противоречит вашему утверждению о том, что он «в стиле cron»).

Как правило, используется специальная структура, которая решает проблемную область «пакетных заданий». Я могу порекомендовать кварц.

0 голосов
/ 11 января 2010

Это будет зависеть от контейнера. Вы можете сделать это в Java с Quartz или просто используя параллельные утилиты планирования Java (ScheduledExecutorService) или в качестве задания cron на уровне ОС.

Каждые 15 минут кажутся экстремальными. Как правило, я бы также посоветовал вам только усекать / удалять файлы журналов, в которые больше не выполняется запись (и обычно они переносятся в одночасье).

...