Кто-нибудь может посоветовать?У меня есть работа, которая выполняется каждый час и контролируется в веб-приложении Java с помощью Quartz 1.8.3.
Что я вижу, так это то, что Кварц иногда начинает работать на секунду раньше.Но так как нет очевидной закономерности, это трудно исправить.
Мой код:
Scheduler_Job sj = Scheduler_Job_DB.get(1);
sj.setJobRunning(Valid.TRUE);
Scheduler_Job_DB.update(sj);
SQLDateTime currPollDateTime = SQLDateTime.getSQLDateTimeNow();
Где currDateTimeNow устанавливается в 17:59:59, когда это должно быть 18:00:00.
Триггер cron для задания Quartz: 0 0 * * *?
Метод SQLDateTime.getSQLDateTimeNow ();просто получает текущий счетчик в миллисекундах и преобразует его в элементы java.sql.Date и java.sql.time следующим образом:
public static SQLDateTime getSQLDateTimeNow() {
long milliSecs = DateTime_Utils.getTimeInMilliseconds();
Date date = new Date(milliSecs);
Time time = new Time(milliSecs);
SQLDateTime sqldt = new SQLDateTime(Date.valueOf(date.toString()), Time.valueOf(time.toString()));
return sqldt;
}
Класс SQLDateTime просто имеет две переменные следующим образом:
private Date sqlDate;
private Time sqlTime;
И это удобно при использовании даты и времени, хранящихся в базе данных в формате гггг-мм-дд ЧЧ: мм: сс.
В 99,9% случаев это нормально, но я не понимаю, почемуКажется, работа запускается на секунду раньше?
Я должен добавить, что обновление до Quartz 2.x не вариант.
Есть идеи у кого-нибудь?
Мое решение - сохранитьэто просто.Поэтому, если задание Quartz запускается в определенный час и если у меня есть данные задания, сохраненные в таблице базы данных, я также могу сохранить текущее время и дату выполнения, например, YYYY-MM-DD 18:00:00.
Итак, задание запускается, оно считывает подробности, включая дату и время из базы данных, и делает все обновления за 18:00:00.
Затем в конце задания текущие время и дата выполнения увеличиваются на час и записываются обратно в базу данных для использования в качестве даты и времени следующего запуска.Таким образом, 18:00:00 становится 19:00:00, и дата остается неизменной, если задание не выполняется в 23: 00: 00.
Таким образом, все синхронизировано, и миллисекунд нет.
В любом случае это звучит хорошо в теории ...