Как стать автором
Обновить

Комментарии 4

Наконец, мы аннотируем наши запланированные задания, применив аннотацию @SchedulerLock

Насколько я понял, SchedulerLock -- это обычная распределенная блокировка. Поэтому запланированное задание все-равно выполнится сразу на всех узлах, но последовательно. Не знаю есть ли у SchedulerLock возможность отмены вызова метода, если он уже заблокирован, т.к. хотелось бы, чтобы задание не повторялось на каждом ноде.

Мне кажется что бы задание не выполнялось на остальных инстансах надо где-то на внешнем ресурсе держать признак блокировки

Собственно SchedulerLock так и делает в базе. Вопрос был больше про его возможности -- может ли он вместо lock сделать подобие trylock. У меня для этого велосипед написан -- когда задание выполняется оно создает запись в б.д. с таймкодом. Если такая запись уже существует, то выполнение скипается.

Из документации разработчика: https://github.com/lukas-krecan/ShedLock

ShedLock гарантирует, что ваши запланированные задачи выполняются не более одного раза в одно и то же время. Если задача выполняется на одном узле, она получает блокировку, которая предотвращает выполнение той же задачи на другом узле (или потоке). Обратите внимание, что, если одна задача уже выполняется на одном узле, выполнение на других узлах не дожидается ожидания, оно просто пропускается.

ShedLock не является распределенным планировщиком

Обратите внимание, что ShedLock не является и никогда не будет полноценным планировщиком, это просто блокировка. Если вам нужен распределенный планировщик, используйте другой проект. ShedLock разработан для использования в ситуациях, когда у вас есть запланированные задачи, которые не готовы к параллельному выполнению, но могут безопасно выполняться повторно. Более того, блокировки основаны на времени, и ShedLock предполагает, что часы на узлах синхронизированы.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации