Spring Boot - harmonogram

Planowanie to proces wykonywania zadań w określonym przedziale czasu. Spring Boot zapewnia dobre wsparcie dla pisania harmonogramu w aplikacjach Spring.

Wyrażenie Java Cron

Wyrażenia Java Cron służą do konfigurowania instancji CronTrigger, podklasy org.quartz.Trigger. Aby uzyskać więcej informacji na temat wyrażenia cron w języku Java, możesz skorzystać z tego linku -

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

Adnotacja @EnableScheduling służy do włączania harmonogramu dla Twojej aplikacji. Ta adnotacja powinna zostać dodana do głównego pliku klasy aplikacji Spring Boot.

@SpringBootApplication
@EnableScheduling

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

Adnotacja @Scheduled służy do wyzwalania harmonogramu na określony czas.

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

Poniżej znajduje się przykładowy kod, który pokazuje, jak wykonywać zadanie co minutę, zaczynając o 9:00 i kończąc o 9:59, każdego dnia

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);
   }
}

Poniższy zrzut ekranu pokazuje, jak aplikacja została uruchomiona o godzinie 09:03:23 i co minutę od tego czasu zostało wykonane zadanie harmonogramu zadań cron.

Stała stawka

Harmonogram stałej stawki służy do wykonywania zadań w określonym czasie. Nie czeka na zakończenie poprzedniego zadania. Wartości powinny być w milisekundach. Przykładowy kod jest pokazany tutaj -

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

Przykładowy kod do wykonywania zadania co sekundę od uruchomienia aplikacji jest pokazany tutaj -

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);
   }
}

Zwróć uwagę na poniższy zrzut ekranu, który przedstawia aplikację, która została uruchomiona o godzinie 09:12:00, a następnie zostało wykonane co drugie zadanie harmonogramu o stałej szybkości.

Naprawiono opóźnienie

Harmonogram stałych opóźnień służy do wykonywania zadań w określonym czasie. Powinien zaczekać na zakończenie poprzedniego zadania. Wartości powinny być w milisekundach. Przykładowy kod jest pokazany tutaj -

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

Tutaj initialDelay to czas, po którym zadanie zostanie wykonane po raz pierwszy po początkowej wartości opóźnienia.

Przykład wykonania zadania co sekundę po 3 sekundach od uruchomienia aplikacji jest pokazany poniżej -

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);
   }
}

Zwróć uwagę na poniższy zrzut ekranu, który pokazuje aplikację, która została uruchomiona o godzinie 09:18:39 i co 3 sekundy, zadanie harmonogramu stałego opóźnienia było wykonywane co sekundę.