Задание по расписанию выполняется дважды в кластере

Мы используем java-планировщик Cron4j для планирования заданий, которые выполняются каждую ночь. Теперь, когда это же веб-приложение развертывается (Tomcat) в кластере (2 узла) на сайте клиента, задания выполняются дважды. Есть ли способ избежать этой проблемы?


person Rakesh    schedule 10.05.2011    source источник
comment
Рассматривали ли вы запуск планировщика автономно, а не в составе кластера Tomcat?   -  person Sean    schedule 10.05.2011


Ответы (3)


Я считаю, что единственный способ сделать это - использовать какое-то внешнее общее состояние, например, в базе данных, для обеспечения некоторой блокировки.

person DaveH    schedule 10.05.2011

Используйте библиотеку Shedlock, это очень просто

@Scheduled(...)
@SchedulerLock(name = "scheduledTaskName")
public void scheduledTask() {

}
person Thirumal    schedule 16.12.2019

Один из способов решить эту проблему - заставить ваше веб-приложение принимать параметр, например. runCronjobs. Вы можете поместить соответствующую запись в web.xml или в какой-либо другой файл конфигурации.

Таким образом, для одного веб-приложения это значение будет установлено на true, а для других развертываний — на false.

person mindas    schedule 10.05.2011