Aller au contenu

Comprendre la syntaxe Cron de @Scheduled de Spring

Spring Cron Scheduling
Auteur
Harpal Singh
Software Engineer
Traduit par
Namastecode
Sommaire

1. Introduction

Dans ce tutoriel, nous allons apprendre à utiliser l’annotation @Scheduled dans Spring avec des expressions cron.

L’expression cron utilisée dans Spring est légèrement différente de l’expression cron unix, car elle nécessite un champ supplémentaire. Cela pourrait prêter à confusion pour certains d’entre nous concernant l’utilisation du sixième champ.

Commençons par comprendre les différents types d’expressions cron, puis apprenons à configurer l’annotation @Scheduled dans Spring.

2. Format standard des expressions Cron

Dans les systèmes basés sur Unix et la plupart des outils en ligne d’expression cron, les expressions cron se composent généralement de cinq champs séparés par des espaces :

 ┌───────────── 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

Chaque champ représente une unité de temps spécifique et peut contenir des valeurs dans la plage indiquée entre parenthèses. Par exemple, nous pouvons écrire une expression cron pour indiquer d’exécuter un travail chaque vendredi à 18h :

0 18 * * 5

Ici, les astérisques représentent chaque valeur, de sorte que cette expression exécutera la tâche à 18h00 chaque vendredi.

Brancher cette expression cron dans @Scheduled ne démarrera même pas notre application Spring car elle nécessite un format différent. Voyons comment nous pouvons utiliser l’annotation @Scheduled dans Spring.

3. Utilisation de l’annotation @Scheduled dans Spring

Pour configurer une tâche à exécuter à un moment ou à un intervalle spécifique dans une application Spring, nous pouvons utiliser l’annotation @Scheduled avec une expression cron :

@Scheduled(cron = "0 0 18 * * 5")
public void scheduledTask() {
    // Task logic here
}

De la même manière, l’expression cron dans cet exemple exécutera la méthode scheduledTask() chaque vendredi à 18 heures. Nous pouvons voir que le format est similaire à l’expression cron standard, mais qu’il nécessite un champ supplémentaire.

Alors, Spring étend le format standard en ajoutant un sixième paramètre au début pour représenter les secondes :

 ┌───────────── 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)
 │ │ │ │ │ │
 * * * * * *

Avoir un contrôle plus précis sur la planification des tâches permet de gérer les tâches cron jusqu’au niveau de la seconde. Cependant, il convient de noter que la charge système peut fortement influencer le temps d’exécution réel des tâches planifiées.

Nous devons noter que pour activer la planification dans Spring, nous devons ajouter l’annotation @EnableScheduling à notre classe de configuration.

Les expressions Cron sont très flexibles et deviennent encore plus puissantes lorsqu’elles sont combinées avec des caractères spéciaux. Faisons un aperçu de ces caractères spéciaux.

4. Caractères spéciaux dans les expressions Cron

Tout comme dans la syntaxe cron standard, les expressions cron de Spring prennent en charge des caractères spéciaux pour offrir plus de flexibilité.

Nous pouvons utiliser l’astérisque * pour représenter toutes les valeurs possibles d’un champ. Alternativement, nous pouvons utiliser un point d’interrogation ? pour représenter aucune valeur spécifique, généralement utilisé pour jour du mois ou jour de la semaine.

Par exemple, pour exécuter une tâche au début de chaque heure tous les jours de la semaine :

@Scheduled(cron = "0 0 * * * ?")

Nous pouvons également spécifier plusieurs valeurs en utilisant une virgule ou une plage de valeurs en utilisant un tiret -. De plus, nous pouvons utiliser la barre oblique / pour spécifier des incréments.

Par exemple, pour exécuter une tâche toutes les 2 heures le samedi et le dimanche entre le premier et le 15e jour du mois :

@Scheduled(cron = "0 0 0/2 1-15 * 6,7")

Comme nous pouvons le voir dans le dernier exemple, nous pouvons combiner plusieurs caractères spéciaux pour créer des motifs de planification complexes.

5. Conclusion

Dans cet article, nous avons appris à propos de l’expression Cron dans Spring et comment l’utiliser avec l’annotation @Scheduled. Tout d’abord, nous avons examiné le format standard de l’expression cron Unix, puis nous avons vu comment Spring l’étend en ajoutant un sixième paramètre pour les secondes. Enfin, nous avons exploré comment utiliser des caractères spéciaux pour créer des motifs de planification complexes.

Articles connexes

Obtenir des valeurs définies dans le fichier de propriétés dans Spring
Spring Properties Basics
Configurer le port pour une application Spring Boot
Spring Basics
Testcontainers dans les tests d'intégration Spring Boot
Spring Testcontainers Testing