Le format cron de Quartz
Une expression Quartz compte six ou sept champs : secondes, minutes, heures, jour du mois, mois, jour de la semaine et une année facultative. Par exemple, 0 0 12 ? * MON-FRI se déclenche à midi en semaine. Les jours sont numérotés de 1 (dimanche) à 7 (samedi), et les noms anglais comme MON ou FRI sont acceptés, y compris dans les plages.
La règle du point d’interrogation
Quartz ne permet pas de restreindre à la fois le jour du mois et le jour de la semaine. Exactement l’un des deux champs doit contenir « ? », qui signifie « aucune valeur précise ». 0 0 12 * * MON est donc invalide ; écrivez 0 0 12 ? * MON. L’explicateur le signale immédiatement.
Caractères spéciaux L, W et #
L signifie « dernier » : L dans le jour du mois est le dernier jour du mois, L-3 trois jours avant, et 6L dans le jour de la semaine est le dernier vendredi. W cherche le jour ouvré le plus proche d’une date sans quitter le mois : 15W se déclenche le jour ouvré le plus proche du 15, et LW est le dernier jour ouvré du mois. Le dièse choisit le n-ième jour de la semaine : 6#3 est le troisième vendredi.
Quartz en pratique
En Java, une expression Quartz est rattachée à un déclencheur, par exemple TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 ? * MON-FRI").inTimeZone(TimeZone.getTimeZone("Europe/Paris"))). Sans inTimeZone, c’est le fuseau par défaut de la JVM qui s’applique. Les instructions de misfire déterminent ce qui se passe si le planificateur était arrêté à l’heure prévue : déclencher une fois tout de suite ou passer au créneau suivant.
Questions fréquentes
- Quelle différence entre le cron Quartz et le cron Unix ?
- Quartz ajoute un champ secondes au début et une année facultative à la fin, numérote les jours à partir de 1 = dimanche, exige « ? » dans un champ de jour et prend en charge L, W et #.
- Puis-je convertir une expression Quartz en crontab ?
- Oui, à condition que les secondes valent 0, qu’aucune année ne soit fixée et que L, W ou # ne soient pas utilisés. Le convertisseur affiche l’équivalent crontab ou explique pourquoi il n’existe pas.
- Que signifie 0 0/5 * * * ?
- Elle se déclenche toutes les cinq minutes, à la seconde 0, à partir de la minute 0 de chaque heure, tous les jours.
- Le cron @Scheduled de Spring est-il identique à Quartz ?
- Très proche, mais Spring numérote dimanche 0 ou 7, n’a pas de champ année et n’exige pas « ? ». Utilisez la page Spring pour les expressions Spring.