Spring Boot - Pianificazione
La pianificazione è un processo di esecuzione delle attività per il periodo di tempo specifico. Spring Boot fornisce un buon supporto per scrivere uno scheduler sulle applicazioni Spring.
Espressione Java Cron
Le espressioni Java Cron vengono utilizzate per configurare le istanze di CronTrigger, una sottoclasse di org.quartz.Trigger. Per ulteriori informazioni sull'espressione cron di Java, fare riferimento a questo collegamento:
https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm
L'annotazione @EnableScheduling viene utilizzata per abilitare lo scheduler per la tua applicazione. Questa annotazione dovrebbe essere aggiunta al file di classe dell'applicazione Spring Boot principale.
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
L'annotazione @Scheduled viene utilizzata per attivare lo scheduler per un periodo di tempo specifico.
@Scheduled(cron = "0 * 9 * * ?")
public void cronJobSch() throws Exception {
}
Di seguito è riportato un codice di esempio che mostra come eseguire l'attività ogni minuto a partire dalle 9:00 e termina alle 9:59, ogni giorno
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);
}
}
La seguente schermata mostra come l'applicazione è stata avviata alle 09:03:23 e per ogni minuto da quel momento è stata eseguita l'attività di cron job scheduler.
Tasso fisso
Lo scheduler a tasso fisso viene utilizzato per eseguire le attività in un momento specifico. Non attende il completamento dell'attività precedente. I valori dovrebbero essere in millisecondi. Il codice di esempio è mostrato qui -
@Scheduled(fixedRate = 1000)
public void fixedRateSch() {
}
Un codice di esempio per eseguire un'attività ogni secondo dall'avvio dell'applicazione è mostrato qui -
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);
}
}
Osservare la seguente schermata che mostra l'applicazione che è stata avviata alle 09:12:00 e successivamente è stata eseguita ogni seconda attività di pianificazione a tasso fisso.
Ritardo fisso
Lo scheduler con ritardo fisso viene utilizzato per eseguire le attività in un momento specifico. Dovrebbe attendere il completamento dell'attività precedente. I valori dovrebbero essere in millisecondi. Un codice di esempio è mostrato qui -
@Scheduled(fixedDelay = 1000, initialDelay = 1000)
public void fixedDelaySch() {
}
In questo caso, initialDelay è il tempo dopo il quale l'attività verrà eseguita la prima volta dopo il valore di ritardo iniziale.
Di seguito è riportato un esempio per eseguire l'attività per ogni secondo dopo che sono stati completati 3 secondi dall'avvio dell'applicazione:
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);
}
}
Osservare la seguente schermata che mostra l'applicazione che è stata avviata alle 09:18:39 e dopo ogni 3 secondi, l'attività di pianificazione del ritardo fisso è stata eseguita ogni secondo.