logo

Expresia Java Cron

Tehnologia este în continuă schimbare zi de zi. Uneori, ni se cere să executăm un job periodic pe server. Rularea manuală a lucrării pe server este o sarcină dificilă, așa că nu poate fi făcută de mai multe ori de către utilizator sau administrator. Pentru a rezolva această problemă, Cron ajută programatorul să execute periodic un job pe server. Este utilizat pe scară largă pentru întreținerea și admirația sistemului automatizat. Pe lângă aceasta, putem folosi și Expresia cron în dezvoltarea web. Există multe situații în care o aplicație web poate avea nevoie să execute o anumită sarcină periodic.

În această secțiune, vom discuta despre Expresii Java Cron , funcționează și implementează Programator Java Quartz .

Ce este Cron?

Practic, Cron este un utilitar care programează o sarcină. Acesta permite utilizatorului să programeze o sarcină periodic la oră, dată, lună, slab și an specificate. Este utilizat pe scară largă în procesele automate în care nu este necesară intervenția umană.

Expresia Java Cron

Expresia Cron

În Java, expresiile Cron sunt folosite pentru a configura instanțe ale CronTrigger clasă. Este o subclasă a org.quartz.Trigger clasă. O expresie Cron este un șir sau o expresie formată din șase sau șapte câmpuri (unitate de timp). Descrie detalii individuale ale programului și comenzii.

conversia șirului de caractere în întreg în java
 

O expresie cron poate atât de simplă, cât și de complexă. De exemplu,

Simplu: * * * * ? * (asteriscul indică câmpuri)

Complex: 0 0/4 12,15,3-35,52 ? Mai, iunie, iulie MAR-SAM 2002-2010.

De asemenea, rețineți că o expresie Cron poate fi scrisă în stiluri diferite, după cum urmează. De exemplu, următoarele trei expresii Cron au același sens.

  • 0 10 9 ? * *
  • 0 10 9 * * ?
  • 0 10 9 * * ? *

Toate cele trei expresii, se execută la ora 9:10 în fiecare zi.

Câmpurile utilizate în expresia Cron

În expresiile Cron, unitatea de timp este cunoscută ca camp . Acestea sunt separate prin spații albe, pot conține oricare dintre valorile permise cu diferite combinații ale caracterelor permise pentru acel câmp. Afișează câmpurile în ordinea așteptată. Următorul tabel prezintă unitatea de timp și valorile corespunzătoare și simbolurile care pot fi utilizate cu expresiile.

Numele domeniului Necesar Valori permise Caractere speciale și simboluri cu câmpuri permise
secunde da 0-59 , - * /
Minute da 0-59 , - * /
Ore da 0-23 , - * /
Ziua lunii da -31 , - * ? / L W C
Lună da 0-11 sau IAN-DEC , - * /
Zi a săptămânii da 1-7 sau SUN-SAT , - * ? / L C #
An Opțional gol sau 1970-2099 , - * /

Simboluri și litere speciale utilizate în expresia Cron

Asterisc (*): Simbolul este folosit atunci când dorim să executăm un eveniment la fiecare unitate de timp (minut, secundă, oră). De exemplu, dacă * este folosit cu unitatea de timp pentru minute, înseamnă că un eveniment se va executa la fiecare minut, automat.

Semnul întrebării (?): Simbolul este folosit în câmpurile precum ziua lunii și ziua săptămânii. Indică valoarea arbitrară și ignoră valoarea câmpurilor. Să presupunem că vrem să executăm un script pe data de 2 a fiecărei luni fără să ne pese de ce zi a săptămânii se încadrează în a 2-a zi a lunii. În acest caz, ar trebui să specificăm un simbol semn de întrebare ( ?) în câmpul zilei săptămânii.

Cratima (-): Simbolul este folosit pentru a specifica intervalul. Determină intervalul de valori. De exemplu, dacă un câmp oră este definit ca , înseamnă că un eveniment se va executa la a 4-a și a 5-a oră.

virgulă (,): Este folosit pentru a defini valorile câmpurilor separate prin virgulă. De exemplu, vineri, sâmbătă, duminică etc.

Slash înainte (/): Este folosit pentru a incrementa valorile unității de timp specificate. Să presupunem că vrem să începem un eveniment la 10 minute, după aceea ni se cere să executăm același eveniment la 20 de minute, următoarea execuție la 30 de minute și așa mai departe. În acest caz, specificăm ora de începere și valoarea incrementală, separate prin bară oblică.

De exemplu, dacă 10/10 în specificat în câmpul minute, înseamnă primul eveniment executat la 10 minute, iar următoarea execuție va fi la 20 de minute dintr-o oră și deci nu.

L (Ultimul): Utilizarea lui L are semnificații diferite cu diferite domenii.

diferența dintre cină și cină
  • Dacă a fost folosit în câmp, denotă ultima zi a lunii, conform calendarului.
  • Dacă a fost folosit cu o valoare de offset ca L-5 . Acesta denotă 5thpână la ultima zi a lunii calendaristice.
  • Dacă a fost folosit în câmp, indică ultima zi a săptămânii. Poate fi folosit și cu altă valoare din domeniu. De exemplu, 7L denotă ultima sambata .

ÎN: Ultimul reprezintă zilele lucrătoare (de luni până vineri). Acesta determină ziua săptămânii care este cea mai apropiată de ziua specificată a lunii.

De exemplu, dacă specificăm 5W în câmpul zilei lunii, înseamnă că w determinăm ziua săptămânii aproape de 5thal lunii.

  • Dacă 5tha lunii este sâmbătă , se va declanșa un eveniment 9th al lunii.
  • Dacă 5tha lunii este duminică , se va declanșa un eveniment unsprezeceth al lunii.

Poate exista un alt caz. Presupune , 1Sfa lunii este sâmbătă, un eveniment va avea loc pe 3rdal lunii. Înseamnă că evenimentul sau scriptul nu se va executa în luna anterioară.

Hash (#): Reprezintă a n-a apariție a unei zile a săptămânii a lunii. De exemplu, a treia vineri a lunii poate fi indicată ca 6#3 .

De ce ar trebui să folosim expresii cron?

Există diverse motive pentru a folosi expresiile cron. Unii dintre ei sunt:

șiruri de concatenare java
  • Putem expira și șterge fișierele de date din cache la un anumit interval.
  • Putem programa zilnic știri și e-mailuri.
  • Putem programa sarcini de lungă durată să ruleze dintr-un script de linie de comandă, mai degrabă decât să le rulăm dintr-un script web. De exemplu, codificarea videoclipurilor sau trimiterea de e-mailuri în bloc.

Exemplu de expresii Cron

Să vedem câteva expresii Cron comune care utilizează simboluri și câmpuri speciale.

Expresia Cron Înțeles Cron Expressions
0 12 * * ? Indică faptul că o lucrare se va executa la ora 12:00 (amiază) în fiecare zi.
0/5 13.18 * * ? Indică faptul că o lucrare se va executa la fiecare cinci minute începând cu ora 13:00 și se termină la 13:55 și apoi începând cu ora 18:00 și se termină la 18:55, în fiecare zi.
0-5 13 * * ? Indică faptul că un job se va executa la fiecare minut începând cu ora 13:00 și se termină la 13:05, în fiecare zi.
15,45 13 ? 6 mar Indică faptul că o lucrare se va executa la 13:15 și 13:45 în fiecare marți din luna iunie.
30 9? * LUNI-VINERI Indică faptul că o lucrare se va executa la ora 9:30 în fiecare luni, marți, miercuri, joi și vineri.
30 9 15 * ? Indică faptul că o lucrare se va executa la 9:30 AM în a 15-a zi a fiecărei luni.
0 18 L * ? Indică faptul că un job se va executa la ora 18:00 în ultima zi a fiecărei luni.
0 18 L-3 * ? Indică faptul că o lucrare se va executa la ora 18:00 în a treia până la ultima zi a fiecărei luni.
30 10 ? *5L Indică faptul că un job se va executa la ora 10:30 în ultima zi de joi a fiecărei luni.
0 10 ? * 23 Indică faptul că un loc de muncă se va executa la ora 10 AM în a treia zi de luni a fiecărei luni.
0 0 10/5 * ? Acesta indică faptul că un loc de muncă se va executa la 12 miezul nopții în fiecare zi, timp de cinci zile, începând cu a 10-a zi a lunii.
0 11 11 11 11 ? Indică faptul că un job se va executa în fiecare 11 noiembrie la ora 11:11
0 15 10 ? * 6L 2002-2005 Incendiu la ora 10:15 în fiecare ultima vineri a fiecărei luni în anii 2002, 2003, 2004 și 2005.
0 0 0 ? * MY#1 Indică faptul că un loc de muncă se va executa în prima zi de luni a lunii la miezul nopții.
0 0 0 LW * * Indică faptul că un job se va executa în ultima zi a săptămânii a lunii la miezul nopții.
0 0/30 8-10 * ** Indică faptul că un job se va executa la 8:00, 8:30, 9:00, 9:30, 10:00 și 10:30 în fiecare zi.

Setare specială în Cron Expressions

Pe lângă simbolul special de mai sus, expresia Cron acceptă și unele valori speciale predefinite. Aceste valori pot fi folosite în locul câmpurilor.

    @anual sau @anual:Are un loc de muncă o dată pe an. De exemplu, '0 0 0 1 1 *' .@lunar: Funcționează o dată pe lună. De exemplu, „0 0 0 1 * *”. @săptămânal: Funcționează o dată pe săptămână. De exemplu, „0 0 0 * * 0”. @dayly sau @midnight:Funcționează o dată pe zi. De exemplu, „0 0 0 * * *”. @la oră: Funcționează la fiecare oră. De exemplu, „0 0 * * * *”.

Utilizarea expresiei Cron în Java

Java oferă un sistem open source de planificare a joburilor care programează un job pentru o anumită unitate de timp. Putem descărca Quartz scheduler de pe site-ul oficial.

În ceea ce privește programarea, jobul este o clasă care conține sarcina de executat. Dar întrebarea este cum să-l programezi. Pentru programarea unui job, definim un declanșator și specificăm când se va executa jobul.

Dacă dorim să implementăm planificatorul Quartz, putem adăuga dependența, după cum urmează:

 org.quartz-scheduler quartz 2.2.1 

Notă: Înainte de a executa următorul program Java, asigurați-vă că ați adăugat cuarț-2.2.1.borcan fișier în cale, altfel veți primi o eroare.

Să vedem implementarea expresiei cron și a jobului printr-un program Java.

Pasul 1: Creați un proiect Maven. Am creat cu numele CronExample .

Pasul 2: În cadrul proiectului, creați două pachete și anume com.javatpoint.app și com.javatpoint.job . În primul pachet, vom defini clasa principală, iar în al doilea pachet vom defini joburile (în cazul nostru numărul de joburi este de cinci).

Pasul 3: În fișierul pom.xml, lipiți următoarea dependență. Acesta descarcă automat fișierele JAR necesare pentru proiect. Fișierul pom arată astfel:

 4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1 

Pasul 4: Creați cinci joburi (în pachetul com.javatpoint.job) pe care doriți să le executați. În cazul nostru, am definit următoarele cinci locuri de muncă.

Job1.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job1 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job1 --->>> Hello user! Time is ' + new Date()); } } 

Job2.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job2 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job2 --->>> Hello user! Time is ' + new Date()); } } 

Job3.java

jsp
 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job3 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job3 --->>> Hello user! Time is ' + new Date()); } } 

Job4.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job4 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job4 --->>> Hello user! Time is ' + new Date()); } } 

Job5.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job5 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job5 --->>> Hello user! Time is ' + new Date()); } } 

Pasul 5: Creați clasa principală cu numele MyApp.

MyApp.java

 package com.javatpoint.app; import org.quartz.CronExpression; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.javatpoint.job.Job1; import com.javatpoint.job.Job2; import com.javatpoint.job.Job3; import com.javatpoint.job.Job4; import com.javatpoint.job.Job5; public class MyApp { public static void main(String args[]) { try { JobDetail job1 = JobBuilder.newJob(Job1.class) .withIdentity('job1', 'group1').build(); Trigger trigger1 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger1', 'group1') .withSchedule(CronScheduleBuilder.cronSchedule('0/5 * * * * ?')) .build(); Scheduler scheduler1 = new StdSchedulerFactory().getScheduler(); scheduler1.start(); scheduler1.scheduleJob(job1, trigger1); JobDetail job2 = JobBuilder.newJob(Job2.class) .withIdentity('job2', 'group2').build(); Trigger trigger2 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger2', 'group2') .withSchedule(CronScheduleBuilder.cronSchedule(new CronExpression('0/7 * * * * ?'))) .build(); Scheduler scheduler2 = new StdSchedulerFactory().getScheduler(); scheduler2.start(); scheduler2.scheduleJob(job2, trigger2); JobDetail job3 = JobBuilder.newJob(Job3.class) .withIdentity('job3', 'group3').build(); Trigger trigger3 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger3', 'group3') .withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(13, 46)) .build(); Scheduler scheduler3 = new StdSchedulerFactory().getScheduler(); scheduler3.start(); scheduler3.scheduleJob(job3, trigger3); JobDetail job4 = JobBuilder.newJob(Job4.class) .withIdentity('job4', 'group4').build(); Trigger trigger4 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger4', 'group4') .withSchedule(CronScheduleBuilder.weeklyOnDayAndHourAndMinute(3, 13, 46)) .build(); Scheduler scheduler4 = new StdSchedulerFactory().getScheduler(); scheduler4.start(); scheduler4.scheduleJob(job4, trigger4); JobDetail job5 = JobBuilder.newJob(Job5.class) .withIdentity('job5', 'group5').build(); Trigger trigger5 = TriggerBuilder .newTrigger().withIdentity('cronTrigger5', 'group5') .withSchedule(CronScheduleBuilder.monthlyOnDayAndHourAndMinute(28, 13, 46)) .build(); Scheduler scheduler5 = new StdSchedulerFactory().getScheduler(); scheduler5.start(); scheduler5.scheduleJob(job5, trigger5); Thread.sleep(100000); scheduler1.shutdown(); scheduler2.shutdown(); scheduler3.shutdown(); scheduler4.shutdown(); scheduler5.shutdown(); } catch (Exception e) { e.printStackTrace(); } } } 

Când am terminat cu toți pașii de mai sus, directorul proiectului arată astfel:

Expresia Java Cron

Pasul 6: Rulați programul Java de mai sus pentru a vedea rezultatul.

Expresia Java Cron

Observăm că fiecare lucrare se execută la un interval de timp specific.