Caractères spéciaux Quartz : L, W et # expliqués
Un guide approfondi au niveau des tokens pour les opérateurs L, W et # de Quartz afin de construire des planifications précises sans surprises à l'exécution.
Ouvrir le générateur QuartzPourquoi les caractères spéciaux Quartz sont importants
La plupart des erreurs cron commencent avant le déploiement, lorsque l'intention de planification et la syntaxe divergent. Le cron standard à cinq champs couvre les minutes, heures, jour du mois, mois et jour de la semaine. Quartz étend cela avec un champ secondes, un champ année et trois caractères spéciaux — L, W et # — qui offrent une précision de planification que le cron standard ne peut égaler.
Ces caractères se comportent différemment selon le champ dans lequel ils apparaissent, et de petites incompréhensions se propagent en planifications qui se déclenchent le mauvais jour ou sautent complètement des exécutions. Cet article explique chaque caractère avec des exemples pratiques, des vérifications de validation et des actions concrètes que vous pouvez effectuer dans le générateur Quartz de Cronwise.
Le caractère L : dernier jour et dernier jour ouvrable
L signifie « dernier » et est valide dans deux champs : jour du mois et jour de la semaine. Sa signification change selon l'endroit où vous le placez.
L dans le jour du mois
Utilisé seul, L signifie le dernier jour du mois. L'expression 0 0 18 L * ? se déclenche à 18 h 00 le dernier jour de chaque mois — que ce soit le 28, le 29, le 30 ou le 31. Vous n'avez jamais besoin de coder en dur les longueurs de mois.
Vous pouvez combiner L avec un décalage négatif. L-3 signifie trois jours avant le dernier jour. Dans un mois de 31 jours, cela correspond au 28 ; en février d'une année non bissextile, cela correspond au 25. C'est utile pour les fenêtres de clôture de facturation.
L dans le jour de la semaine
Dans le champ jour de la semaine, vous associez L à un numéro de jour : 6L signifie le dernier vendredi du mois. L'expression 0 0 9 ? * 6L se déclenche à 9 h 00 le dernier vendredi de chaque mois — utile pour le traitement de la paie ou les rapports de fin de mois qui doivent tomber un jour de la semaine spécifique.
Le caractère W : jour ouvrable le plus proche
W est valide uniquement dans le champ jour du mois. Il sélectionne le jour ouvrable le plus proche (lundi au vendredi) de la date spécifiée. Écrivez 15W pour signifier « le jour ouvrable le plus proche du 15 ».
Comment W se résout
Si le 15 tombe un samedi, la planification se décale au vendredi 14. S'il tombe un dimanche, elle se décale au lundi 16. La résolution ne franchit jamais les limites de mois : si le 1er est un samedi, 1W se résout au lundi 3, pas au vendredi précédent.
Combiner L et W
Quartz permet la combinaison LW, signifiant « le dernier jour ouvrable du mois ». C'est idéal pour les clôtures financières de fin de mois qui doivent s'exécuter un jour ouvré. Si le dernier jour est un samedi, LW se résout au vendredi. Notez que W ne peut pas être combiné avec une liste ou une plage — des expressions comme 1W,15W sont invalides.
Le caractère # : nième jour de la semaine du mois
# est valide uniquement dans le champ jour de la semaine et spécifie la Nième occurrence d'un jour de la semaine dans un mois. La syntaxe est jour#N, où jour est le numéro du jour de la semaine (1–7, dimanche au samedi) et N est l'occurrence (1–5).
Exemples pratiques
0 0 10 ? * 2#1 se déclenche à 10 h 00 le premier lundi de chaque mois. 0 0 14 ? * 6#3 se déclenche à 14 h 00 le troisième vendredi. Ces motifs remplacent les contournements fragiles qui reposent sur des plages de jour du mois et de la logique conditionnelle.
Quand N dépasse les occurrences réelles
Si vous spécifiez 2#5 (le cinquième lundi), la planification ne se déclenche pas dans les mois n'ayant que quatre lundis. Quartz traite cela comme une non-correspondance, pas une erreur — un saut silencieux qui rend la surveillance du nombre d'exécutions essentielle.
Le caractère # ne peut pas apparaître dans le jour du mois et ne peut pas être combiné avec des listes, des plages ou des incréments. Chaque champ jour de la semaine accepte au maximum une spécification #.
Comportement aux limites et modes de défaillance
Les erreurs subtiles avec ces caractères déclenchent rarement des erreurs de validation mais dévient silencieusement de l'intention.
Pièges courants
| Expression | Attendu | Réel | Correction |
|---|---|---|---|
0 0 9 L * 6 | Dernier jour si vendredi | Conflit : les deux champs jour sont définis | Utilisez ? dans un champ jour |
0 0 9 1W * ? (le 1er est samedi) | Vendredi précédent | Lundi 3 (pas de franchissement de mois) | Vérifiez avec l'aperçu des prochaines exécutions |
0 0 9 ? * 2#5 | Cinquième lundi chaque mois | Uniquement les mois avec cinq lundis | Ajoutez une surveillance du nombre d'exécutions |
0 0 9 LW * ? en février | Dernier jour ouvrable | 26, 27 ou 28 selon l'année | Vérifiez l'aperçu tenant compte du fuseau horaire |
L'erreur la plus dangereuse est de spécifier des valeurs dans les deux champs jour du mois et jour de la semaine sans utiliser ? comme espace réservé. Quartz exige que exactement un champ jour contienne ?. L'omettre produit une erreur d'analyse ou un comportement indéfini selon la version de Quartz.
Cadre de décision : choisir le bon caractère
Chaque caractère spécial résout un problème de planification différent. Le choix du bon dépend de si votre planification est ancrée à une date calendaire, un jour de la semaine ou une position relative dans le mois.
| Besoin | Caractère | Champ | Exemple |
|---|---|---|---|
| Exécuter le dernier jour de chaque mois | L | Jour du mois | 0 0 18 L * ? |
| Exécuter N jours avant la fin du mois | L-N | Jour du mois | 0 0 18 L-3 * ? |
| Exécuter le dernier jour de la semaine spécifique | nL | Jour de la semaine | 0 0 9 ? * 6L |
| Exécuter le jour ouvrable le plus proche d'une date | W | Jour du mois | 0 0 9 15W * ? |
| Exécuter le dernier jour ouvrable du mois | LW | Jour du mois | 0 0 17 LW * ? |
| Exécuter le Nième jour de la semaine du mois | # | Jour de la semaine | 0 0 10 ? * 2#1 |
Quand votre besoin est purement basé sur la date (« le 15 »), vous n'avez pas du tout besoin de caractères spéciaux. Utilisez W uniquement quand l'alignement sur les jours ouvrés est requis. Utilisez # uniquement quand l'occurrence récurrente d'un jour de la semaine importe plus qu'une date fixe. Et utilisez L quand la sémantique de fin de mois doit s'adapter automatiquement aux longueurs de mois variables.
Renforcement pour la production : vérifications pré-déploiement
Avant qu'une planification Quartz n'atteigne la production, parcourez ces étapes de vérification pour détecter les cas limites que la validation statique ne peut pas révéler.
Liste de vérification
| Vérification | Pourquoi c'est important | Critère de réussite |
|---|---|---|
| Analyse sans erreurs | Confirme la validité syntaxique | Aucune exception d'analyse |
| Inspecter les 10 prochaines exécutions | Révèle les surprises de limites de mois | Toutes les dates correspondent à l'intention |
| Vérifier l'alignement du fuseau horaire | Décalages entre fuseau horaire serveur et métier | Les exécutions correspondent au fuseau horaire cible |
Confirmer le placement de ? | Les deux champs jour actifs sont indéfinis | Un champ jour contient ? |
| Vérifier les sauts silencieux | #5 peut se déclencher < 12 fois/an | Nombre annuel documenté |
L'aperçu des prochaines exécutions de Cronwise renvoie les 10 prochaines exécutions dans le fuseau horaire sélectionné, vous permettant de vérifier ces critères sans déployer de tâche de test. Si votre équipe opère dans plusieurs fuseaux horaires, consultez Les fuseaux horaires cron expliqués pour les équipes internationales pour des conseils supplémentaires.
Synthèse
Les caractères L, W et # de Quartz vous donnent une puissance de planification que le cron standard ne peut égaler. L s'adapte aux longueurs de mois variables, W aligne l'exécution sur les jours ouvrés et # ancre les exécutions à des occurrences spécifiques de jours de la semaine. Utilisés correctement, ils éliminent les contournements fragiles et rendent l'intention de planification explicite dans l'expression elle-même.
Les règles de décision clés sont simples. Utilisez L pour la logique de fin de mois. Utilisez W quand vous avez besoin du jour ouvrable le plus proche. Utilisez # pour le Nième jour de la semaine d'un mois. Placez toujours ? dans le champ jour que vous n'utilisez pas. Et vérifiez toujours avec un aperçu des prochaines exécutions avant de déployer.
Prêt à créer ou valider votre planification Quartz ? Ouvrez le générateur Quartz Cronwise pour construire des expressions visuellement, voir des explications en langage clair et prévisualiser les exécutions dans votre fuseau horaire cible. Pour plus de guides de planification cron et d'analyses approfondies, parcourez tous les articles cron sur Cronwise.