Teknologien er i konstant endring dag for dag. Noen ganger er vi pålagt å utføre en jobb med jevne mellomrom på serveren. Å kjøre jobben på serveren manuelt er en vanskelig oppgave, så det kan ikke gjøres flere ganger av brukeren eller administratoren. For å løse dette problemet, Cron hjelper programmereren med å utføre en jobb med jevne mellomrom på serveren. Det er mye brukt for automatisert systemvedlikehold og beundring. Ved siden av dette kan vi også bruke Cron uttrykk innen webutvikling. Det er mange situasjoner når en nettapplikasjon kan trenge å utføre en bestemt oppgave med jevne mellomrom.
I denne delen vil vi diskutere Java Cron-uttrykk , det fungerer og implementeres Java Quartz planlegger .
Hva er Cron?
I utgangspunktet er Cron et verktøy som planlegger en oppgave. Den lar brukeren planlegge en oppgave med jevne mellomrom til angitt tid, dato, måned, svak og år. Det er mye brukt i automatiserte prosesser der menneskelig intervensjon ikke er nødvendig.
Cron uttrykk
I Java brukes Cron-uttrykk til å konfigurere forekomster av CronTrigger klasse. Det er en underklasse av org.quartz.Trigger klasse. Et Cron-uttrykk er en streng eller et uttrykk som består av seks eller syv felt (tidsenhet). Den beskriver individuelle detaljer om tidsplanen og kommandoen.
Et cron-uttrykk kan både enkelt og komplekst. For eksempel,
java med swing
Enkel: * * * * ? * (stjerne angir felt)
Kompleks: 0 0/4 12,15,3-35,52 ? mai, juni, juli TIR-LØR 2002-2010.
Vær også oppmerksom på at et Cron-uttrykk kan skrives i forskjellige stiler, som følger. For eksempel har følgende tre Cron-uttrykk samme betydning.
- 0 10 9 ? **
- 0 10 9 * * ?
- 0 10 9 * * ? *
Alle de tre uttrykkene utføres kl. 9:10 hver dag.
Felter som brukes i Cron-uttrykk
I Cron-uttrykk er tidsenhet kjent som felt . Disse er atskilt med mellomrom, kan inneholde hvilken som helst av de tillatte verdiene med ulike kombinasjoner av de tillatte tegnene for det feltet. Den viser feltene i forventet rekkefølge. Følgende tabell viser tidsenheten og tilsvarende verdier, og symboler som kan brukes med uttrykkene.
Feltnavn | Obligatorisk | Tillatte verdier | Tillatte spesialtegn og symboler med felt |
---|---|---|---|
Sekunder | Ja | 0-59 | , - * / |
Minutter | Ja | 0-59 | , - * / |
Timer | Ja | 0-23 | , - * / |
Dag i måneden | Ja | -31 | , - * ? / L W C |
Måned | Ja | 0-11 eller JAN-DES | , - * / |
Ukedag | Ja | 1-7 eller SØN-LØR | , - * ? / L C # |
År | Valgfri | tom eller 1970-2099 | , - * / |
Spesielle symboler og bokstaver som brukes i Cron-uttrykk
Stjerne (*): Symbolet brukes når vi ønsker å utføre hendelse ved hver tidsenhet (minutt, sekund, time). For eksempel, hvis * brukes med minutttidsenhet, betyr det at en hendelse vil utføres automatisk hvert minutt.
gi nytt navn til linux-katalogen
Spørsmålstegn (?): Symbolet brukes i feltene som dag i måneden og ukedagen. Den angir den vilkårlige verdien og ignorerer feltverdien. Anta at vi ønsker å kjøre et skript den 2. i hver måned uten å bry oss om hvilken ukedag som faller på den 2. dagen i måneden. I dette tilfellet bør vi spesifisere et spørsmålstegnsymbol ( ?) i feltet ukedag.
Bindestrek (-): Symbolet brukes til å spesifisere området. Det bestemmer verdiområdet. For eksempel hvis et timefelt er definert som , betyr at en hendelse vil utføres på 4. og 5. time.
Komma (,): Den brukes til å definere verdier for feltene atskilt med komma. For eksempel fre, lør, søn osv.
Fremover skråstrek (/): Den brukes til å øke verdiene for den angitte tidsenheten. Anta at vi ønsker å starte en hendelse etter 10 minutter, etter det er vi pålagt å utføre den samme hendelsen etter 20 minutter, neste gjennomføring etter 30 minutter, og så videre. I dette tilfellet spesifiserer vi starttidspunktet og den inkrementelle verdien, atskilt med skråstrek.
For eksempel hvis 10/10 i spesifisert i minuttfeltet betyr det at den første hendelsen utføres etter 10 minutter, og den neste utførelsen vil være etter 20 minutter av en time, og så nei.
L (siste): Bruken av L har forskjellig betydning med ulike felt.
- Hvis den har blitt brukt i feltet, angir det den siste dagen i måneden, i henhold til kalenderen.
- Hvis den har blitt brukt med en offset-verdi som L-5 . Det angir 5thtil siste dag i kalendermåneden.
- Hvis den har blitt brukt i feltet, angir den siste dagen i uken. Den kan også brukes med andre verdier i feltet. For eksempel, 7L betegner sist lørdag .
I: Den senere representerer ukedagene (mandag til fredag). Den bestemmer ukedagen som er nærmest den angitte dagen i måneden.
For eksempel hvis vi spesifiserer 5W i dag i måned-feltet betyr det at w bestemmer ukedagen nær 5thmånedens.
- Hvis 5thi måneden er lørdag , vil en hendelse utløses 9th månedens.
- Hvis 5thi måneden er søndag , vil en hendelse utløses elleveth månedens.
Det kan være en annen sak. Anta , 1sti måneden er lørdag, en begivenhet vil finne sted 3rdmånedens. Det betyr at hendelsen eller skriptet ikke vil kjøre i forrige måned.
Hash (#): Den representerer den n-te forekomsten av en ukedag i måneden. For eksempel kan tredje fredag i måneden angis som 6#3 .
Hvorfor skal vi bruke cron-uttrykk?
Det er ulike grunner til å bruke cron-uttrykk. Noen av dem er:
- Vi kan utløpe og slette hurtigbufrede datafiler med visse intervaller.
- Vi kan planlegge daglige nyhetsbrev og e-poster.
- Vi kan planlegge langvarige oppgaver til å kjøre fra et kommandolinjeskript, i stedet for å kjøre det fra et webskript. Som å kode videoer, eller sende ut e-poster.
Eksempel på Cron-uttrykk
La oss se noen vanlige Cron-uttrykk som bruker spesielle symboler og felt.
java while loop
Cron uttrykk | Betydningen av Cron-uttrykk |
---|---|
0 12 * * ? | Det angir at en jobb vil utføres klokken 12:00 (middag) hver dag. |
0/5 13,18 * * ? | Det angir at en jobb vil utføres hvert femte minutt fra kl. 13.00 og slutter kl. 13.55 og deretter kl. 18.00 og slutter kl. 18.55, hver dag. |
0-5 13 * * ? | Det angir at en jobb vil utføres hvert minutt som starter kl. 13.00 og slutter kl. 13.05, hver dag. |
15,45 13 ? 6 tirs | Det angir at en jobb vil utføres kl. 13.15 og 13.45 hver tirsdag i juni måned. |
30 9? * MAND-FRE | Det angir at en jobb vil utføres klokken 9:30 hver mandag, tirsdag, onsdag, torsdag og fredag. |
30 9 15 * ? | Det angir at en jobb vil utføres kl. 9.30 den 15. dagen i hver måned. |
0 18 L * ? | Det angir at en jobb vil utføres kl. 18.00 den siste dagen i hver måned. |
0 18 L-3 * ? | Det angir at en jobb vil utføres kl. 18.00 den tredje til siste dagen i hver måned. |
30 10 ? *5L | Det angir at en jobb vil utføres kl. 10.30 den siste torsdagen i hver måned. |
0 10 ? * 23 | Det angir at en jobb vil utføres kl. 10.00 den tredje mandagen i hver måned. |
0 0 10/5 * ? | Det angir at en jobb vil utføres ved midnatt 12 hver dag i fem dager fra den 10. dagen i måneden. |
0 11 11 11 11 ? | Det angir at en jobb vil utføres hver 11. november kl. 11:11 |
0 15 10 ? * 6L 2002-2005 | Brann kl. 10.15 hver siste fredag i hver måned i årene 2002, 2003, 2004 og 2005. |
0 0 0 ? * MIN#1 | Det angir at en jobb vil utføres den første mandagen i måneden ved midnatt. |
0 0 0 LW * * | Det angir at en jobb vil utføres siste ukedag i måneden ved midnatt. |
0 0/30 8-10 * * * | Det angir at en jobb vil utføres kl. 8.00, 8.30, 9.00, 9.30, 10.00 og 10.30 hver dag. |
Spesiell innstilling i Cron Expressions
I tillegg til spesialsymbolet ovenfor, støtter Cron-uttrykk også noen forhåndsdefinerte spesialverdier. Disse verdiene kan brukes i stedet for feltene.
Bruke Cron Expression i Java
Java tilbyr et jobbplanleggingssystem med åpen kildekode som planlegger en jobb for en bestemt tidsenhet. Vi kan laste ned Quartz scheduler fra den offisielle siden.
Når det gjelder programmering, er jobb en klasse som inneholder oppgaven som skal utføres. Men spørsmålet er hvordan man planlegger det. For å planlegge en jobb definerer vi en trigger og spesifiserte når jobben skal utføres.
Hvis vi ønsker å implementere Quartz-planlegger, kan vi legge til avhengigheten, som følger:
org.quartz-scheduler quartz 2.2.1
Merk: Før du kjører følgende Java-program, sørg for at du har lagt til kvarts-2.2.1.krukke filen i banen, ellers får du feil.
La oss se implementeringen av cron-uttrykk og jobb gjennom et Java-program.
Trinn 1: Lag et Maven-prosjekt. Vi har laget med navnet CronExample .
Steg 2: Inne i prosjektet oppretter du to pakker, nemlig com.javatpoint.app og com.javatpoint.job . I den første pakken vil vi definere hovedklassen og i den andre pakken vil vi definere jobbene (i vårt tilfelle er antall jobber fem).
Trinn 3: I pom.xml-filen limer du inn følgende avhengighet. Den laster automatisk ned de nødvendige JAR-filene for prosjektet. Pom-filen ser slik ut:
4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1
Trinn 4: Opprett fem jobber (i com.javatpoint.job-pakken) som du vil utføre. I vårt tilfelle har vi definert følgende fem jobber.
dele en streng i c++
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
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()); } }
Trinn 5: Lag hovedklassen med navnet 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(); } } }
Når vi er ferdige med alle trinnene ovenfor, ser prosjektkatalogen slik ut:
avl trerotasjon
Trinn 6: Kjør Java-programmet ovenfor for å se utdataene.
Vi observerer at hver jobb utføres med et bestemt tidsintervall.