Spring Boot - Планирование

Планирование - это процесс выполнения задач за определенный период времени. Spring Boot обеспечивает хорошую поддержку для написания планировщика для приложений Spring.

Выражение Java Cron

Выражения Java Cron используются для настройки экземпляров CronTrigger, подкласса org.quartz.Trigger. Для получения дополнительной информации о выражении Java cron вы можете обратиться к этой ссылке -

https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

Аннотация @EnableScheduling используется для включения планировщика для вашего приложения. Эта аннотация должна быть добавлена ​​в основной файл класса приложения Spring Boot.

@SpringBootApplication
@EnableScheduling

public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

Аннотация @Scheduled используется для запуска планировщика на определенный период времени.

@Scheduled(cron = "0 * 9 * * ?")
public void cronJobSch() throws Exception {
}

Ниже приведен пример кода, который показывает, как выполнять задачу каждую минуту, начиная с 9:00 утра и заканчивая в 9:59 утра, каждый день.

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(cron = "0 * 9 * * ?")
   public void cronJobSch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Java cron job expression:: " + strDate);
   }
}

На следующем снимке экрана показано, как приложение запускалось в 09:03:23 и каждую минуту с этого момента выполнялась задача планировщика заданий cron.

Фиксированная ставка

Планировщик с фиксированной скоростью используется для выполнения задач в определенное время. Он не ждет завершения предыдущей задачи. Значения должны быть в миллисекундах. Пример кода показан здесь -

@Scheduled(fixedRate = 1000)
public void fixedRateSch() { 
}

Пример кода для выполнения задачи каждую секунду с момента запуска приложения показан здесь -

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(fixedRate = 1000)
   public void fixedRateSch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Fixed Rate scheduler:: " + strDate);
   }
}

Обратите внимание на следующий снимок экрана, на котором показано приложение, запущенное в 09:12:00, и после этого каждая вторая задача планировщика с фиксированной скоростью выполнялась.

Фиксированная задержка

Планировщик с фиксированной задержкой используется для выполнения задач в определенное время. Он должен дождаться завершения предыдущей задачи. Значения должны быть в миллисекундах. Здесь показан пример кода -

@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void fixedDelaySch() {
}

Здесь initialDelay - это время, по истечении которого задача будет выполнена в первый раз после значения начальной задержки.

Пример выполнения задачи каждую секунду после завершения 3 секунд после запуска приложения показан ниже -

package com.tutorialspoint.demo.scheduler;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class Scheduler {
   @Scheduled(fixedDelay = 1000, initialDelay = 3000)
   public void fixedDelaySch() {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
      Date now = new Date();
      String strDate = sdf.format(now);
      System.out.println("Fixed Delay scheduler:: " + strDate);
   }
}

Обратите внимание на следующий снимок экрана, на котором показано приложение, запущенное в 09:18:39, и каждые 3 секунды задача планировщика с фиксированной задержкой выполнялась каждую секунду.