Используйте @Scheduled для создания запланированных задач в Spring

Большие данные

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 минуты, вторая задача будет ждать некоторое время после завершения предыдущей задачи перед выполнением второй задачи.