1. Introduzione
In questo tutorial, impariamo come utilizzare l’annotazione @Scheduled in Spring con espressioni cron.
L’espressione cron utilizzata in Spring è leggermente diversa dall’espressione cron di Unix, poiché richiede un campo aggiuntivo. Questo potrebbe confondere alcuni di noi riguardo all’uso del sesto campo.
Iniziamo comprendendo i diversi tipi di espressioni cron e poi impariamo come configurare l’annotazione @Scheduled in Spring.
2. Formato Standard dell’Espressione Cron
Nei sistemi basati su Unix e nella maggior parte degli strumenti online per le espressioni cron, le espressioni cron tipicamente consistono in cinque campi separati da spazi:
┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of the month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday; 7 is also Sunday)
│ │ │ │ │
│ │ │ │ │
* * * * * command to execute
Ogni campo rappresenta un’unità di tempo specifica e può contenere valori nell’intervallo tra parentesi. Ad esempio, possiamo scrivere un’espressione cron per indicare di eseguire un lavoro ogni venerdì alle 18:00:
0 18 * * 5
Qui, gli asterischi rappresentano ogni valore in modo che questa espressione esegua il lavoro alle 18:00 ogni venerdì.
Collegare questa espressione cron in @Scheduled non avvierà nemmeno la nostra applicazione Spring poiché richiede un formato diverso. Vediamo come possiamo utilizzare l’annotazione @Scheduled in Spring.
3. Utilizzo dell’annotazione @Scheduled in Spring
Per configurare un’attività da eseguire a un orario specifico o a intervalli in un’applicazione Spring, possiamo utilizzare l’annotazione @Scheduled insieme a un’espressione cron:
@Scheduled(cron = "0 0 18 * * 5")
public void scheduledTask() {
// Task logic here
}
Allo stesso modo, l’espressione cron in questo esempio eseguirà il metodo scheduledTask() ogni venerdì alle 18:00. Possiamo notare che il formato è simile all’espressione cron standard, ma richiede un campo aggiuntivo.
Quindi, Spring estende il formato standard aggiungendo un sesto parametro all’inizio per rappresentare i secondi:
┌───────────── second (0 - 59)
│ ┌───────────── minute (0 - 59)
│ │ ┌───────────── hour (0 - 23)
│ │ │ ┌───────────── day of the month (1 - 31)
│ │ │ │ ┌───────────── month (1 - 12)
│ │ │ │ │ ┌───────────── day of the week (0 - 7) (0 and 7 both represent Sunday)
│ │ │ │ │ │
* * * * * *
Avere un controllo più dettagliato sulla pianificazione dei compiti consente di gestire i cron job fino al livello dei secondi. Tuttavia, vale la pena notare che il carico di sistema può influenzare notevolmente il tempo di esecuzione effettivo dei compiti pianificati.
Dobbiamo notare che per abilitare la pianificazione in Spring, dobbiamo aggiungere l’annotazione @EnableScheduling alla nostra classe di configurazione.
Le espressioni cron sono molto flessibili e diventano ancora più potenti quando vengono combinate con caratteri speciali. Diamo un’occhiata a questi caratteri speciali.
4. Caratteri Speciali nelle Espressioni Cron
Proprio come nella sintassi cron standard, le espressioni cron di Spring supportano caratteri speciali per offrire maggiore flessibilità.
Possiamo utilizzare l’asterisco * per rappresentare tutti i valori possibili per un campo. In alternativa, possiamo usare il punto interrogativo ? per rappresentare nessun valore specifico, tipicamente utilizzato per giorno del mese o giorno della settimana.
Ad esempio, per eseguire un’attività all’inizio di ogni ora ogni giorno della settimana:
@Scheduled(cron = "0 0 * * * ?")
Possiamo anche specificare più valori utilizzando una virgola o un intervallo di valori utilizzando un trattino -. Inoltre, possiamo usare la barra obliqua / per specificare incrementi.
Ad esempio, per eseguire un’attività ogni 2 ore il sabato e la domenica tra il primo e il quindicesimo giorno del mese:
@Scheduled(cron = "0 0 0/2 1-15 * 6,7")
Come possiamo vedere dall’ultimo esempio, possiamo combinare più caratteri speciali per creare schemi di programmazione complessi.
5. Conclusione
In questo articolo, abbiamo imparato riguardo all’espressione Cron in Spring e come utilizzarla con l’annotazione @Scheduled. Prima, abbiamo esaminato il formato standard dell’espressione cron di Unix e poi abbiamo visto come Spring lo estende aggiungendo un sesto parametro per i secondi. Infine, abbiamo esplorato come utilizzare caratteri speciali per creare schemi di pianificazione complessi.