Java Quartz Cron Trigger - PullRequest
       14

Java Quartz Cron Trigger

1 голос
/ 02 сентября 2010

Я использую триггер Quartz Cron в моей Java-программе.Я использовал выражение Cron: 0 0 * * *?

Теперь я хотел, чтобы планировщик выполнялся один раз в час.Чтобы проверить то же самое, запустил мой сервер jboss, и после этого я установил время в Windows примерно на 5:59:45, и в 6:00:00 планировщик не сработал.

Теперь в следующий раз я впервые настроилвремя, чтобы сказать 5:55:00, а затем я запустил сервер и обнаружил, что планировщик сработал в 6: 00: 00.

Поддерживает ли сервер или планировщик время внутри, конечно же, изначально инициализировано с помощью системного времени?

Ответы [ 4 ]

5 голосов
/ 02 сентября 2010

Согласно исходному коду Quartz CronTrigger , триггер сохраняет дату следующего запуска.

Я полагаю, что если вы запустите сервер в 6:15:00, Кварц сохранит 7:00:00 в качестве следующего времени запуска. Изменение времени сервера на 5:55:45 не обновляет время следующего запуска, а 7:00:00 сохраняется как время следующего запуска. Таким образом, событие не состоится в 6:00:00, а вместо этого в 7:00: 00.

Итак, время не сохраняется напрямую, но время срабатывания сохраняется, и, похоже, оно не обновляется, если вы меняете системные часы.

1 голос
/ 03 февраля 2011

Если вы используете хранилище заданий JDBC, кварц проверяет базу данных с интервалом в одну минуту в поисках заданий для выполнения на данный момент, используя текущее системное время.

Когда вы двигаетесь вперед по системному времени, кварц запускает соответствующие задания при следующей проверке (это означает, что в течение минуты).

0 голосов
/ 03 июля 2019

Upvote для ответа Вивьен Барусс, кварц будет хранить время каждого срабатывания каждого триггера. Если вы используете JDBC JobStore, вы можете найти таблицу, похожую на * _ QRTZ_TRIGGERS в вашей базе данных, а COLUMN NEXT_FIRE_TIME сохраняет время следующего запуска в формате отметки времени.

0 голосов
/ 04 сентября 2012

Я также столкнулся с той же проблемой, и решение этой проблемы:

выражение означает 0 0 * * *?т.е. сек, мин, час, день месяца, месяц, день недели.так что стреляйте каждый час, каждый день, каждый месяц и каждую неделю, независимо от того, каким будет год.

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

1.Вы запустили сервер в 5:55, но запуск сервера занял 7 минут, таким образом, время прошло на 2 минуты больше, чем на 6:00, поэтому время следующего запуска будет 7:00

2.но если ваш сервер успешно запускается в 5:59:59, то он наверняка сработает в 6:00, потому что планировщик должен запускаться каждый час, а сервер готов к часам 6:00.

примечание: изменение времени в Windows после запуска сервера не приведет к запуску планировщика, так как время записывается во время работы сервера.

...