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秒执行