1. Условия запуска запланированной задачи
1. Добавьте в класс запуска приложения: @EnableScheduling
2. Добавьте аннотации к классам с методами синхронизации: @Component, который включает классы задач синхронизации в управление компонентами Spring.
3. Напишите метод синхронизации: @Scheduled(cron = "0 0/1 * ?"), выражение cron выполняет метод каждую минуту.
Во-вторых, использование @Scheduled
1. фиксированная задержка
@Scheduled(fixedDelay = 5000)
public void testFixedDelay(){
try {
log.info("当前时间:" + DateUtil.now());
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Задержите каждую задачу на 3 секунды, затем распечатайте текущее время.
Сводка правил fixedDelay:
После завершения выполнения предыдущей задачи подождите еще 5 секунд, а затем выполните вторую задачу.
2. фиксированная скорость
@Scheduled(fixedRate = 5000)
public void testFixedRate(){
try {
log.info("当前时间:" + DateUtil.now());
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
После запуска задача выполняется каждые 5 секунд.
Если время задержки изменено на 8 секунд, выходное значение становится равным 8 секундам, как показано на следующем рисунке:
Краткое изложение законов фиксированной скорости:
Если запланированная задача настроена на выполнение каждые 5 секунд, если предыдущая задача занимает более 5 секунд, вторая задача будет выполняться сразу после завершения предыдущей задачи. Если предыдущая задача заняла менее 5 секунд, подождите 5 секунд перед выполнением второй задачи.
3. Подробное объяснение выражения кукурузы (обычно используется)
Выражения Cron доступныСекунды, минуты, часы, дни, недели, месяцы, годыПредставлять:
秒 分 时 天 周 月 年
0 * 14 * * ? * : 代表每天从14点开始,每一分钟执行一次。
0 0 14 * * ? * : 代表每天的14点执行一次任务。
Cron можно использовать для генерации выражений онлайн: для проверки правдоподобия Cron.
Пример кукурузы:Выполнять каждые 2 минуты.
@Scheduled(cron = "0 0/2 * * * ?")
public void test() {
int j = 0;
for (int i = 0; i < 10; i++) {
log.info("Scheduled测试");
j++;
log.info("j的值为:" + j);
try {
Thread.sleep(1000 * 20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Эффект:
Суммировать:
Как показано в приведенном выше коде, метод test() настроен на выполнение каждые 2 минуты. Однако если время выполнения предыдущей задачи превышает 2 минуты, вторая задача будет ждать некоторое время после завершения предыдущей задачи перед выполнением второй задачи.