118 votes

Quartz : Une expression Cron qui ne s'exécutera jamais

Je sais qu'il y a un doublon aquí Ce qui est probablement exactement mon cas, même si cela mériterait une meilleure explication, que je vais essayer de fournir ici.

Je travaille avec une application web Java utilisant un contexte d'application Spring. Dans ce contexte, j'ai défini des tâches planifiées en utilisant Quartz. Ces travaux sont déclenchés par un cron défini dans un fichier .properties.

Le contexte Spring est intégré dans le war, tandis que le fichier .properties se trouve sur le serveur d'application (Tomcat dans ce cas précis).

Ceci est très bien et permet de définir des crons différents selon l'environnement (développement, intégration, production, ...).

Maintenant, lorsque j'exécute cette application localement sur mon propre ordinateur, je ne souhaite pas que ces travaux soient exécutés. Existe-t-il un moyen d'écrire une expression cron qui ne se déclenchera jamais ?

8voto

mrmoosehead Points 133

J'ai trouvé ceci en essayant de résoudre un problème similaire - la désactivation d'une expression cron - mais j'ai rencontré les mêmes problèmes en exigeant une date de programmation future valide.

J'ai également rencontré des problèmes en utilisant la syntaxe à 7 valeurs - je ne peux pas spécifier une année dans le programme cron.

J'ai donc utilisé ceci : 0 0 3 ? 2 MON#5

Les prochaines fois que cela s'exécutera sont :

  1. Lundi 29 février 2044 3:00 AM
  2. Lundi 29 février 2072 3:00 AM
  3. Lundi 29 février 2112 3:00 AM
  4. Lundi 29 février 2140 3:00 AM
  5. Lundi 29 février 2168 3:00 AM

Donc, essentiellement, à toutes fins utiles, il est désactivé. :)

Ah. Malédiction, cela ne fonctionnera que pour la syntaxe du planificateur Quartz - la syntaxe du CronTrigger de Spring ne permet pas MON#5 pour le cinquième lundi.

La meilleure solution suivante est donc 0 0 3 29 2 ? qui ne s'exécutera qu'à 3 heures du matin le 29 février (années bissextiles).

2voto

Stephane Nicoll Points 18754

Maintenant, lorsque j'exécute cette application localement sur mon propre ordinateur, je ne souhaite pas que ces travaux soient exécutés. Existe-t-il un moyen d'écrire une expression cron qui ne se déclenchera jamais ?

Si vous souhaitez désactiver la programmation sur votre ordinateur, vous disposez de plusieurs moyens pour y parvenir.

Tout d'abord, vous pourriez déplacer la configuration de Quartz dans un fichier @Profile -et ne pas activer ce profil localement. Quartz ne démarrera pas du tout si le profil n'est pas actif.

Une alternative est de configurer Quartz pour qu'il ne démarre pas automatiquement. Il existe une SchedulerFactoryBean#setAutoStartup() que vous pouvez définir dans BeanPostProcessor enregistré dans un profil de développement. Bien que ce fil de discussion soit assez ancien, Spring Boot offre une alternative en enregistrant un profil de développeur. SchedulerFactoryBeanCustomizer haricot pour faire la même chose.

-1voto

prem911 Points 107

Utilisez 31 pour tout mois qui compte moins de jours que celui-ci. Ainsi, 0 0 31 2 * for February ou 0 0 31 5 * for May 0 0 31 6 for June * 0 0 31 9 * for September 0 0 31 11 * for November

doit faire pour empêcher l'exécution du cron. Ce sont des expressions cron valides et peuvent être validées sur https://crontab.guru/#0_0_31_2_ *

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X