Учебники

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.

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