CronTrigger запускает поток раньше указанного времениJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 CronTrigger запускает поток раньше указанного времени

Сообщение Anonymous »

У меня есть ThreadPoolTaskScheduler, запланированный CronTrigger, и я наблюдаю довольно странную вещь. Я запускаю в нем простую задачу, которая просто печатает текущую дату и время. Вот так:

Код: Выделить всё

public class MyCron {
Logger logger = LoggerFactory.getLogger(MyCron);

private final ThreadPoolTaskScheduler scheduler;
private final CronTrigger cronTrigger;
private ScheduledFuture runnableTask;

public MyCron(String cronEntry) {
this.scheduler = new ThreadPoolTaskScheduler();
this.scheduler.setPoolSize(10);
this.scheduler.setThreadNamePrefix("MyCron-" + name + "-");
this.scheduler.initialize();
this.cronTrigger = new CronTrigger(cronEntry);
runnableTask = scheduler.schedule(this::workerThread, cronTrigger);
}

где this::workerThread печатает дату и время. Но я заметил, что он запускается немного раньше запланированного, например, для строк cron 0 */5 * * * * и 0 */7 * * * * я наблюдаю следующее:

Код: Выделить всё

mycron  | 2024-05-30T17:59:59.844Z  INFO 1 --- [n-Cron test 2-7] c.e   : Cron test 2 worker is running: Thu May 30 2024 17:59:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:04:59.785Z  INFO 1 --- [n-Cron test 1-1] c.e   : Cron test 1 worker is running: Thu May 30 2024 18:04:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:06:59.702Z  INFO 1 --- [n-Cron test 2-7] c.e   : Cron test 2 worker is running: Thu May 30 2024 18:06:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:09:59.785Z  INFO 1 --- [n-Cron test 1-1] c.e   : Cron test 1 worker is running: Thu May 30 2024 18:09:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:13:59.702Z  INFO 1 --- [n-Cron test 2-7] c.e   : Cron test 2 worker is running: Thu May 30 2024 18:13:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:14:59.784Z  INFO 1 --- [n-Cron test 1-1] c.e   : Cron test 1 worker is running: Thu May 30 2024 18:14:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:19:59.785Z  INFO 1 --- [n-Cron test 1-1] c.e   : Cron test 1 worker is running: Thu May 30 2024 18:19:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:20:59.665Z  INFO 1 --- [n-Cron test 2-7] c.e   : Cron test 2 worker is running: Thu May 30 2024 18:20:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:24:59.746Z  INFO 1 --- [n-Cron test 1-1] c.e   : Cron test 1 worker is running: Thu May 30 2024 18:24:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:27:59.692Z  INFO 1 --- [n-Cron test 2-7] c.e   : Cron test 2 worker is running: Thu May 30 2024 18:27:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:29:59.783Z  INFO 1 --- [n-Cron test 1-1] c.e   : Cron test 1 worker is running: Thu May 30 2024 18:29:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:34:59.694Z  INFO 1 --- [n-Cron test 2-7] c.e   : Cron test 2 worker is running: Thu May 30 2024 18:34:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:34:59.783Z  INFO 1 --- [n-Cron test 1-1] c.e   : Cron test 1 worker is running: Thu May 30 2024 18:34:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:39:59.782Z  INFO 1 --- [n-Cron test 1-1] c.e   : Cron test 1 worker is running: Thu May 30 2024 18:39:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:41:59.694Z  INFO 1 --- [n-Cron test 2-7] c.e   : Cron test 2 worker is running: Thu May 30 2024 18:41:59 GMT+0000 (UTC)
mycron  | 2024-05-30T18:44:59.790Z  INFO 1 --- [n-Cron test 1-1] c.e   : Cron test 1 worker is running: Thu May 30 2024 18:44:59 GMT+0000 (UTC)
Я не понимаю, как это возможно и почему такое могло произойти. Я делаю что-то не так?
Мои версии: работают с Spring Boot v3.3.0, Spring v6.1.8
Спасибо!
Обновление: я вижу закрытый запрос, поскольку вопрос неясен. Я предполагал, что это довольно ясно, но я все равно попытаюсь объяснить это дальше. Поскольку я указал, что секунды CronTrigger установлены на ноль, я ожидаю, что мой планировщик будет работать через ноль секунд, а не на 59-й секунде. Это минимум. Другая сторона заключается в том, что если я настрою запуск каждые 5 минут, я ожидаю, что он запустится в 18:05:00, а не в 18:04:59. Вот ссылка на javadoc: https://docs.spring.io/spring-framework ... ng.String)

Подробнее здесь: https://stackoverflow.com/questions/785 ... ified-time
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»