Expresie cron de primăvară pentru fiecare zi 1:01:am (Programare, Java, Spring, Cron, Cronexpression, Primăvară Programată)

d-man a intrebat.

Încerc să fac ca codul meu să se execute după un program fix, pe baza unei expresii cron Spring. Aș dori ca codul să fie executat în fiecare zi la ora 1:01:am. Am încercat următoarea expresie, dar nu mi-a ieșit. Ce este în neregulă cu sintaxa de aici?

@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
    // ...
}

Comentarii

  • quartz-scheduler.org/api/2.2.1/org/quartz/CronExpression.html –  > Por Kanagavelu Sugumar.
  • quartz-scheduler.org/api/2.2.1/org/quartz/… –  > Por Kanagavelu Sugumar.
  • expresia mea cron 0 0 0 0 1 JAN MON a funcționat până anul trecut. De la 1 ianuarie încolo nu mai funcționează spunând că expresia cron invalidă. Deși acest lucru a fost destinat pentru o frecvență foarte mică, dar am reușit să rulăm serverul tc. după 1 ianuarie nu a mai funcționat. Când am schimbat la 0 0 0 7 ? * SUN a început să funcționeze. Sunt curios să aflu de ce 0 0 0 0 1 JAN MON a încetat să mai funcționeze, în timp ce anul trecut a funcționat bine în ianuarie.  > Por spandey.
  • 0 0 0 0 1 JAN MON poate fi o expresie greșită, dar și în acest caz a funcționat și serverul tc nu s-a plâns niciodată –  > Por spandey.
6 răspunsuri
gipinani

Încercați cu:

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

Mai jos găsiți modelele de exemplu de pe forumul 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

Expresia Cron este reprezentată de șase câmpuri:

second, minute, hour, day of month, month, day(s) of week

(*) means match any

*/X înseamnă „fiecare X”

? („nicio valoare specifică”) – util atunci când trebuie să specificați ceva într-unul dintre cele două câmpuri în care caracterul este permis, dar nu și în celălalt. De exemplu, dacă vreau ca declanșatorul meu să se declanșeze într-o anumită zi a lunii (să zicem, 10), dar nu mă interesează ce zi a săptămânii se întâmplă să fie, aș pune „10” în câmpul „day-of-the-month” și „?” în câmpul „day-of-week”.

PS: Pentru ca acest lucru să funcționeze, nu uitați să îl activați în contextul aplicației dumneavoastră: https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support

Comentarii

    19

  • Formatul este, de asemenea, documentat în spring aici – docs.spring.io/spring/docs/3.0.x/api/org/springframework/… –  > Por chrismarx.
  • Cred că spring cron este capabil să furnizeze și furnizarea de secunde, dar cronul normal unix se bazează pe minute… deoarece în paginile de manual unix minutul este cea mai mică unitate de timp care poate fi configurată. –  > Por nanosoft.
  • care este semnificația caracterului „?”? Se aplică doar la câmpul „ziua (zilele) săptămânii”? Ar funcționa/face ceva diferit dacă am înlocui caracterul „?” cu „*” în exemplul cu ziua de Crăciun? –  > Por encrest.
  • @encrest aruncați o privire aici: stackoverflow.com/questions/11499740/… –  > Por gipinani.
  • Un tutorial bun la <quartz-scheduler.org/documentation/quartz-2.x/tutorials/…> –  > Por Trey Jonn.
Bahadir Tasdemir

Pentru planificatorul meu, îl folosesc pentru a trage la 6 dimineața în fiecare zi și notația mea cron este:

0 0 6 * * *

Dacă doriți ca ora 1:01:am, atunci setați-o la

0 1 1 * * *

Codul complet pentru programator

@Scheduled(cron="0 1 1 * * *")
public void doScheduledWork() {
    //complete scheduled work
}

** FOARTE IMPORTANT

Pentru a fi sigur de corectitudinea orei de declanșare a planificatorului, trebuie să setați valoarea zonei astfel (eu sunt în Istanbul):

@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
    //complete scheduled work
}

Puteți găsi valorile complete ale fusurilor orare la aici.

Notă: Versiunea cadrului meu Spring este: 4.0.7.RELEASE

Comentarii

  • Nu știu de ce răspunsul tău are doar 12, chiar dacă este singurul răspuns corect aici! – user1115139
  • Vă mulțumesc foarte mult @MoayadAbuJaber. Scorul nu este important, dacă dezvoltatorii sunt capabili să își rezolve problemele cu răspunsurile mele este suficient, noroc. –  > Por Bahadir Tasdemir.
  • pot folosi zona de usee cu xml config sheduler <task:scheduled ref="paypalCronJob" method="runTask" cron="0 0 6 * * * ?"/> ?? –  > Por shareef.
  • thumbs up pentru menționarea fusului orar –  > Por Forhad.
  • Mulțumesc, @Forhad. Dacă sunteți dezvoltator și vă ocupați de oricare dintre problemele care au legătură cu datele și orele, trebuie să cunoașteți detaliile despre marcajele temporale, fusurile orare și conversiile. În caz contrar, datele dvs. vor fi fără sens –  > Por Bahadir Tasdemir.
user3298173

Puteți utiliza adnotarea metodei dvs. cu @Scheduled(cron ="0 1 1 * * ?").

0 – este pentru secunde

1- 1 minut

1 – ora din zi.

Maleen Abewardana

Ceva lipsește din răspunsul lui gipinani

@Scheduled(cron = "0 1 1,13 * * ?", zone = "CST")

Aceasta se va executa la ora 1.01 și 13.01. Poate fi folosit atunci când trebuie să executați lucrarea fără un model de mai multe ori pe zi.

Iar atributul de zonă este foarte util, atunci când faceți implementări în servere la distanță. Acesta a fost introdus odată cu spring 4.

Comentarii

  • Rețineți că suportul pentru abrevieri (pentru fusul orar) este doar pentru compatibilitate cu JDK 1.1.x și că trebuie utilizate numele complete – conform javadoc -.  > Por slashron.
Irlan Cidade

Un lucru pe care l-am observat este: Spring CronTrigger nu este cron. Puteți ajunge să aveți 7 parametri într-o expresie cron validă (pe care o puteți valida pe cronmaker.com) și apoi spring nu o acceptă. În cele mai multe cazuri, trebuie doar să ștergeți ultimul parametru și totul funcționează bine.

Comentarii

  • „CronTrigger nu este Quartz” –  > Por Sandy Simonton.
MACCXpace

Expresie cron de primăvară pentru fiecare zi 1:01:am

@Scheduled(cron = „0 1 1 1 ? * * *”)

pentru mai multe informații, verificați aceste informații:

https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm