Решение Java Cron с проверкой завершения

Я ищу простое решение cron-типа для java-приложения.

Я посмотрел на cron4j, где вы можете настроить метод для выполнения, например, каждые 5 минут.

Только у меня есть специальное требование, что, если предыдущий вызов метода все еще выполняется, он не должен запускать другой одновременный вызов, а просто пропустить этот вызов и повторить попытку через 5 минут и т. Д., Т.е. я хочу убедиться, что никогда запустить 2 потока для одной и той же работы параллельно. Только если предыдущий вызов метода завершен, должен начинаться новый вызов.

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

1 ответ

Я предпочитаю Cron4j, потому что я считаю, что он легкий и простой в использовании. Так что я бы использовал метод на уровне приложения для выполнения этой синхронизации.

Например, если ваше приложение распространяется, то данные о ваших заданиях должны храниться в некотором общем хранилище, например, в базе данных. Затем в этой базе данных вы можете установить флаг (то есть значение столбца для каждой детали задания), который указывает, выполняется ли уже это задание. И затем, следующее время выполнения (то есть другое значение столбца, и я считаю, что наличие столбца, содержащего флаг следующего выполнения очень полезно, вы должны попробовать его, если вы этого еще не сделали), должно быть изменено путем добавления любого смещения, которое вам нравится.

Если ваше приложение не распространяется, то вы можете легко использовать синхронизированный статический метод или статический экземпляр ReentrantLock для управления синхронизацией.

Другие вопросы по тегам