«Новые возможности Spring Boot 2.4» добавляют общие макросы для упрощения выражений Cron.

Spring Boot Java

Говоря о выражениях cron, вы должны быть знакомы с ними, мы часто используем их как временные задачи для выполнения правил политики. Во фреймворке Spring Boot выражения cron в основном используются в приложениях с аннотацией @Scheduled. После Spring Boot 2.4 (также Spring 5.3) был представлен CronExpression. Процессор выражений для замены оригинального CronSequenceGenerator.

Зачем заменять оригинальный CronSequenceGenerator?Этот процессор основан наjava.util.CalendarОграничения относительно велики и не могут быть завершеныlast day of monthсемантика.

  • Например, используйте CronExpression для расчета следующего времени выполнения выражения.
  LocalDateTime now = LocalDateTime.now();
  System.out.println("当前运行时间: " + now);

  // 每小时执行一次
  CronExpression expression1 = CronExpression.parse("0 0 0/1 * * *");
  LocalDateTime nextTime = expression1.next(now);
  System.out.println("每小时执行一次 -> 下次执行时间: " + nextTime);

   // 每小时第十分执行一次
  CronExpression expression2 = CronExpression.parse("0 10 0/1 * * *");
  LocalDateTime nextTime2 = expression2.next(now);
  System.out.println("每小时第十分执行 -> 下次执行时间: " + nextTime2);
  • Результаты
当前运行时间: 2020-11-14T23:04:46.302739
每小时执行一次 ->   下次执行时间: 2020-11-15T00:00
每小时第十分执行 -> 下次执行时间: 2020-11-14T23:10

Добавлены общие макросы для общих выражений

Выражения Cron непросты для понимания не-разработчиками, поэтому трудно исправлять ошибки, когда они возникают. Например, я помещу выражение cron вонлайн-сайт[1]Запустите симуляцию, чтобы подтвердить процесс выполнения, чтобы облегчить устранение неполадок.

Для повышения удобочитаемости Spring Boot теперь поддерживает следующие макросы, представляющие общие выражения. Эти макросы можно использовать вместо шестизначных выражений, поэтому:

@Scheduled(cron = "@hourly")。

эквивалентно

@Scheduled(cron = "0 0 * * * *")

Другие распространенные макрокоманды

макрос cron-выражение имея в виду
@yearly 0 0 0 1 1 * Выполнять раз в год
@monthly 0 0 0 1 * * Выполнять раз в месяц
@weekly 0 0 0 * * 0 Выполнять раз в неделю
@daily 0 0 0 * * * Выполнять раз в день
@hourly 0 0 * * * * Выполнять каждый час

Улучшить оригинальные выражения Последние дни

       每周的第几天
           |
           ∨
 * * * * * *
       ^
       |
    每月的第几天

как указано выше每月的第几天,每周的第几天служба поддержкипоследние несколько дней(М) Семантика Например:

0 0 0 L * *   每月最后一天的零时

0 0 0 L-3 * *   每月最后第三天的零时  (L-d 格式)

0 0 0 * * 5L    每月最后的星期五零时  (dL 格式)

0 0 0 * * FRIL  每月最后的星期五零时  ( (星期一星期天的英文缩写)L 格式)

Улучшите оригинальное выражение

 * * * * * *
       ^
       |
    每月的第几天

как указано выше每月的第几天служба поддержкирабочий день(В) Семантика Например:

0 0 0 1W * * 每月的第一个工作日零时
0 0 0 LW * * 每月的最后一个工作日零时

Улучшите оригинальное выражение День недели недели

       每周的第几天
           |
           ∨
 * * * * * *

как указано выше每周的第几天Поддерживает семантику дня недели месяца Например

0 0 0 ? * 5#2     每月第二周的星期五零时

0 0 0 ? * MON#1    每月周一的星期一零时

использованная литература

[1]

Интернет-сайт:https://cron.qqe2.com/