@Запланированная аннотация

Spring Boot

1 Обзор

Аннотация @Scheduled — это аннотация, предоставляемая Spring Boot для управления задачами по времени. Она в основном используется для управления выполнением задач в указанное время или через равные промежутки времени. Обратите внимание, что ее необходимо использовать в сочетании с @EnableScheduling. три основных исполнения конфигурации для настройки @Scheduled Способ времени, cron, fixedRate, fixedDelay.

2 cron

cron — это параметр @Scheduled, это строка, разделенная 5 пробелами, разрешено только 6 полей (обратите внимание, что это не 7, 7 сразу сообщит об ошибке), представляющих секунды, минуты, часы, дни, месяцы, неделю.

единица измерения разрешение Подстановочные знаки разрешены
второй 0-59 , - * /
Минута 0-59 , - * /
Время 0-23 , - * /
день 1-31 , - * / ? L W
Луна 1-12 или JAN-DEC (прописные и строчные буквы) , - * / ?
неделю 1-7 или SUN-SAT (прописные и строчные буквы) , - * / ? L #

2.1 подстановочные знаки cron

символ значение
* Все значения.В поле секунд означает выполнение в секунду, в поле месяца означает выполнение в месяц
? Если вы не укажете значение, вам не нужно быть связанным со значением текущего указанного поля.Например, если оно выполняется каждый день, но вам не нужно заботиться о дне недели, вы можете установить поле недели?
- Интервал, например 0-2 секунды, означает, что 0 секунд, 1 секунда и 2 секунды будут активированы.
, Несколько значений, таких как запуск в 0 секунд, 20 секунд и 25 секунд, могут установить второе поле на 0, 20, 25
/ Инкрементальный запуск, например установка 0/3 во втором поле, начиная с 0-й секунды, запуск каждые 3 секунды
L Наконец, только в полях дня или недели используйте L в поле дня для последнего дня месяца и 3L в поле недели для последнего четверга месяца.
W Разрешается использовать только в поле дня, указывая рабочий день, начиная с ближайшего дня.Рабочий день относится к понедельнику-пятнице.
# Разрешено только в поле недели с указанием дня месяца, например, 2#3, 3-й вторник месяца.

2.2 пример cron

@Scheduled(cron = "0 * * * 1 SAT") //每年的1月的所有周六的所有0秒时间执行
@Scheduled(cron = "0 0 0 1 Jan ?") //每年的1月的1日的0时0分0秒执行

cron поддерживает заполнители, если они есть в файле конфигурации

cron = 2 2 2 2 2 ?

но

@Scheduled(cron = "${cron}")

Указывает, что оно выполняется в два часа две минуты и две секунды 2 февраля каждого года.

3 fixedRate

3.1 fixedRate

fixedRate указывает, как долго выполняться с момента последнего времени выполнения, в мс. как

@Scheduled(fixedRate = 1000 * 5)

Выполнить снова через 5 секунд после последнего выполнения.

3.2 fixedRateString

Существует аналогичный параметр с именем fixedRateString, который представлен в виде строки и поддерживает заполнители. как

@Scheduled(fixedRateString = "1000")

Выполнить снова через 1 секунду после последнего выполнения. Если в файле конфигурации есть соответствующие свойства, вы можете использовать заполнители для получения свойств, например, в application.properties.

interval=2000

можно использовать

@Scheduled(fixedRateStirng="${interval}")

Представляет 2-секундный интервал.

4 fixedDelay

4.1 fixedDelay

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

@Scheduled(fixedDelay = 1000 * 3600 * 12) //上一次执行完毕后半天后再次执行

4.2 fixedDelayString

Аналогичен fixedRateString, но также поддерживает заполнители.

@Scheduled(fixedDelayString = "${fixedDelay}")

5 initialDelay

5.1 initialDelay

InitialDelay указывает, как долго выполняться после первой задержки, в мс, а затем выполняется в соответствии с правилами, указанными в cron/fixedRate/fixedRateString/fixedDelay/fixedDelayString, одно из которых необходимо указать.

@Scheduled(initialDelay=1000,fixedRate=1000) //首次运行延迟1s

5.2 initialDelayString

Аналогичен initialDelay, но это строка, поддерживающая заполнители.

@Scheduled(initialDelayString = "${initialDelay}",cron = "0 0 0 14 4 ?") 
//按照配置文件initialDelay指定的时间首次延迟,并于每年4月14日0时0分0秒执行