J'essaie de faire exécuter mon code selon un calendrier fixe, basé sur une expression Spring cron. Je voudrais que le code soit exécuté tous les jours à 01h01. J'ai essayé l'expression suivante, mais cela ne s'est pas déclenché pour moi. Quel est le problème avec la syntaxe ici?
@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
// ...
}
Essayez avec:
@Scheduled(cron = "0 1 1 * * ?")
Vous trouverez ci-dessous des exemples de modèles du forum Spring:
* "0 0 * * * *" = the top of every hour of every day.
* "*/10 * * * * *" = every ten seconds.
* "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
* "0 0 8,10 * * *" = 8 and 10 o'clock of every day.
* "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30 and 10 o'clock every day.
* "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
* "0 0 0 25 12 ?" = every Christmas Day at midnight
L'expression Cron est représentée par six champs:
second, minute, hour, day of month, month, day(s) of week
(*)
signifie correspondre à tout
*/X
signifie "chaque X"
?
("pas de valeur spécifique") - utile lorsque vous devez spécifier quelque chose dans l'un des deux champs dans lesquels le caractère est autorisé, mais pas dans l'autre. Par exemple, si je veux que ma gâchette se déclenche un jour particulier du mois (le 10, par exemple), mais je me moque de savoir quel jour de la semaine il se trouve, je mettrais "10" dans la journée. champ de mois et "?" dans le champ du jour de la semaine.
PS: Pour que cela fonctionne, n'oubliez pas de l'activer dans le contexte de votre application: https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling. html # scheduling-annotation-support
Pour mon ordonnanceur, je l’utilise pour tirer tous les jours à 6 heures et ma notation cron est la suivante:
0 0 6 * * *
Si vous voulez 1: 01: am alors le régler à
0 1 1 * * *
Code complet pour le planificateur
@Scheduled(cron="0 1 1 * * *")
public void doScheduledWork() {
//complete scheduled work
}
** TRES IMPORTANT
Pour être sûr de l'exactitude du temps de déclenchement de votre planificateur, vous devez définir la valeur de zone comme ceci (je suis à Istanbul):
@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
//complete scheduled work
}
Vous pouvez trouver les valeurs de fuseau horaire complètes à partir de ici .
Remarque: ma version du framework Spring est la suivante: 4.0.7.RELEASE
Vous pouvez utiliser annoter votre méthode avec @Scheduled(cron ="0 1 1 * * ?")
.
0 - est pour les secondes
1- 1 minute
1 heure du jour.
Quelque chose manque à la réponse de Gipinani
@Scheduled(cron = "0 1 1,13 * * ?", zone = "CST")
Ceci sera exécuté à 1.01 et 13.01. Il peut être utilisé lorsque vous devez exécuter le travail sans motif plusieurs fois par jour.
Et l'attribut de zone est très utile lorsque vous effectuez des déploiements sur des serveurs distants. Cela a été introduit avec le printemps 4.
Une chose que j'ai remarquée est la suivante: Spring CronTrigger n'est pas cron. Vous pouvez vous retrouver avec 7 paramètres dans une expression cron valide (que vous pouvez valider sur cronmaker.com), puis ne pas l’accepter. Dans la plupart des cas, vous supprimez simplement le dernier paramètre et tout fonctionne correctement.
Printemps cron expression pour chaque jour 01h01
@Scheduled (cron = "0 1 1? * *")
pour plus d'informations, vérifiez ces informations:
https://docs.Oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm