Говоря о выражениях 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/