Teknologien ændrer sig konstant dag for dag. Nogle gange er vi forpligtet til at udføre et job med jævne mellemrum på serveren. At køre jobbet på serveren manuelt er en vanskelig opgave, så det kan ikke udføres flere gange af brugeren eller administratoren. For at løse dette problem, Cron hjælper programmøren med at udføre et job med jævne mellemrum på serveren. Det er meget brugt til automatiseret systemvedligeholdelse og beundring. Udover dette kan vi også bruge Cron udtryk i webudvikling. Der er mange situationer, hvor en webapplikation muligvis skal udføre en bestemt opgave med jævne mellemrum.
I dette afsnit vil vi diskutere Java Cron udtryk , det fungerer og implementerer igennem Java Quartz skemalægger .
Hvad er Cron?
Grundlæggende er Cron et hjælpeprogram, der planlægger en opgave. Det giver brugeren mulighed for at planlægge en opgave periodisk på angivet tidspunkt, dato, måned, svag og år. Det er meget brugt i automatiserede processer, hvor menneskelig indgriben ikke er påkrævet.
Cron udtryk
I Java bruges Cron-udtryk til at konfigurere forekomster af CronTrigger klasse. Det er en underklasse af org.quartz.Trigger klasse. Et Cron-udtryk er en streng eller et udtryk, der består af seks eller syv felter (tidsenhed). Den beskriver individuelle detaljer om tidsplanen og kommandoen.
Et cron-udtryk kan både simpelt og komplekst. For eksempel,
streng understreng java
Enkel: * * * * ? * (stjerne angiver felter)
Kompleks: 0 0/4 12,15,3-35,52 ? maj, juni, juli TIR-LØR 2002-2010.
Bemærk også, at et Cron-udtryk kan skrives i forskellige stilarter, som følger. For eksempel har følgende tre Cron-udtryk samme betydning.
- 0 10 9 ? **
- 0 10 9 * * ?
- 0 10 9 * * ? *
Alle de tre udtryk udføres kl. 9:10 hver dag.
Felter, der bruges i Cron-udtryk
I Cron-udtryk er tidsenhed kendt som Mark . Disse er adskilt af hvidt mellemrum, kan indeholde enhver af de tilladte værdier med forskellige kombinationer af de tilladte tegn for det pågældende felt. Den viser felterne i den forventede rækkefølge. Følgende tabel viser tidsenheden og tilsvarende værdier og symboler, der kan bruges sammen med udtrykkene.
Feltnavn | Påkrævet | Tilladte værdier | Tilladte specialtegn og symboler med felter |
---|---|---|---|
Sekunder | Ja | 0-59 | , - * / |
Referater | Ja | 0-59 | , - * / |
Timer | Ja | 0-23 | , - * / |
Dag i måneden | Ja | -31 | , - * ? / L W C |
Måned | Ja | 0-11 eller JAN-DEC | , - * / |
ugedag | Ja | 1-7 eller SØN-LØR | , - * ? / L C # |
År | Valgfri | tom eller 1970-2099 | , - * / |
Særlige symboler og bogstaver, der bruges i Cron-udtryk
Stjerne (*): Symbolet bruges, når vi ønsker at udføre begivenhed ved hver tidsenhed (minut, sekund, time). For eksempel, hvis * bruges med minuttidsenhed, betyder det, at en hændelse udføres automatisk hvert minut.
omdøb linux bibliotek
Spørgsmålstegn (?): Symbolet bruges i felterne som dag i måneden og ugedag. Det angiver den vilkårlige værdi og ignorerer felternes værdi. Antag, at vi ønsker at udføre et script den 2. i hver måned uden at bekymre os om, hvilken ugedag der falder på den 2. dag i måneden. I dette tilfælde skal vi angive et spørgsmålstegn ( ?) i ugedagsfeltet.
Bindestreg (-): Symbolet bruges til at angive området. Det bestemmer rækkevidden af værdier. For eksempel hvis et timefelt er defineret som , betyder, at en begivenhed udføres på 4. og 5. time.
Komma (,): Det bruges til at definere værdier for felterne adskilt med komma. For eksempel fredag, lør, søn osv.
Skråstreg (/): Det bruges til at øge værdierne for den angivne tidsenhed. Antag, at vi vil starte en begivenhed efter 10 minutter, derefter skal vi udføre den samme begivenhed efter 20 minutter, næste afvikling efter 30 minutter og så videre. I dette tilfælde angiver vi starttidspunktet og den trinvise værdi, adskilt af skråstreg.
For eksempel hvis 10/10 i angivet i minutfeltet betyder det, at den første hændelse udføres efter 10 minutter, og den næste eksekvering vil være på 20 minutter af en time, og så nej.
L (sidste): Brugen af L har forskellig betydning med forskellige felter.
- Hvis det har været brugt i felt, angiver det den sidste dag i måneden ifølge kalenderen.
- Hvis den er blevet brugt med en offsetværdi som f.eks L-5 . Det betegner 5thtil sidste dag i kalendermåneden.
- Hvis det har været brugt i felt, angiver det den sidste dag i ugen. Det kan også bruges med anden værdi i feltet. For eksempel, 7L betegner sidste lørdag .
I: Den senere repræsenterer hverdagene (mandag til fredag). Det bestemmer den ugedag, der er nærmest den angivne dag i måneden.
For eksempel, hvis vi specificerer 5W i feltet dag i måned betyder det, at vi bestemmer ugedagen tæt på 5thi måneden.
- Hvis den 5thi måneden er lørdag , vil en begivenhed udløses 9th i måneden.
- Hvis den 5thi måneden er Søndag , vil en begivenhed udløses elleveth i måneden.
Der kan være en anden sag. Formode , 1sti måneden er lørdag, en begivenhed finder sted den 3rdi måneden. Det betyder, at begivenhed eller script ikke vil blive udført i den foregående måned.
Hash (#): Det repræsenterer den n-te forekomst af en ugedag i måneden. For eksempel kan tredje fredag i måneden angives som 6#3 .
Hvorfor skal vi bruge cron-udtryk?
Der er forskellige grunde til at bruge cron-udtryk. Nogle af dem er:
- Vi kan udløbe og slette cachelagrede datafiler med et bestemt interval.
- Vi kan planlægge daglige nyhedsbreve og e-mails.
- Vi kan planlægge langvarige opgaver til at køre fra et kommandolinjescript i stedet for at køre det fra et webscript. F.eks. at kode videoer eller udsende e-mails.
Eksempel på Cron-udtryk
Lad os se nogle almindelige Cron-udtryk, der bruger specielle symboler og felter.
markdown gennemstregning
Cron udtryk | Betydning af Cron-udtryk |
---|---|
0 12 * * ? | Det angiver, at et job udføres kl. 12:00 (middag) hver dag. |
0/5 13,18 * * ? | Det angiver, at et job udføres hvert femte minut, der starter kl. 13.00 og slutter kl. 13.55 og derefter starter kl. 18.00 og slutter kl. 18.55 hver dag. |
0-5 13 * * ? | Det angiver, at et job udføres hvert minut, der starter kl. 13.00 og slutter kl. 13.05, hver dag. |
15,45 13 ? 6 tirs | Det angiver, at et job udføres kl. 13.15 og 13.45 hver tirsdag i juni måned. |
30 9? * MAN-FRED | Det angiver, at et job udføres kl. 9:30 hver mandag, tirsdag, onsdag, torsdag og fredag. |
30 9 15 * ? | Det angiver, at et job udføres kl. 9.30 den 15. dag i hver måned. |
0 18 L * ? | Det angiver, at et job udføres kl. 18.00 den sidste dag i hver måned. |
0 18 L-3 * ? | Det angiver, at et job udføres kl. 18.00 den tredje til sidste dag i hver måned. |
30 10 ? *5L | Det angiver, at et job udføres kl. 10:30 den sidste torsdag i hver måned. |
0 10 ? * 23 | Det angiver, at et job udføres kl. 10.00 den tredje mandag i hver måned. |
0 0 10/5 * ? | Det angiver, at et job udføres kl. 12.00 hver dag i fem dage fra den 10. dag i måneden. |
0 11 11 11 11 ? | Det angiver, at et job udføres hver 11. november kl. 11:11 |
0 15 10 ? * 6L 2002-2005 | Brand kl. 10:15 hver sidste fredag i hver måned i årene 2002, 2003, 2004 og 2005. |
0 0 0 ? * MIN#1 | Det angiver, at et job udføres den første mandag i måneden ved midnat. |
0 0 0 LW * * | Det angiver, at et job udføres den sidste hverdag i måneden ved midnat. |
0 0/30 8-10 * * * | Det angiver, at et job udføres kl. 8:00, 8:30, 9:00, 9:30, 10:00 og 10:30 hver dag. |
Speciel indstilling i Cron-udtryk
Udover ovenstående specielle symbol understøtter Cron-udtryk også nogle foruddefinerede specialværdier. Disse værdier kan bruges i stedet for felterne.
Brug af Cron Expression i Java
Java leverer et open source-jobplanlægningssystem, der planlægger et job til en bestemt tidsenhed. Vi kan downloade Quartz Scheduler fra det officielle websted.
Med hensyn til programmering er job en klasse, der indeholder den opgave, der skal udføres. Men spørgsmålet er, hvordan man planlægger det. For at planlægge et job definerer vi en trigger og specificerer hvornår jobbet skal udføres.
Hvis vi vil implementere Quartz scheduler, kan vi tilføje afhængigheden som følger:
org.quartz-scheduler quartz 2.2.1
Bemærk: Før du udfører følgende Java-program, skal du sikre dig, at du har tilføjet kvarts-2.2.1.krukke fil i stien, ellers får du fejl.
Lad os se implementeringen af cron-udtryk og job gennem et Java-program.
Trin 1: Opret et Maven-projekt. Vi har skabt med navnet CronExample .
Trin 2: Inde i projektet skal du oprette to pakker, nemlig com.javatpoint.app og com.javatpoint.job . I den første pakke vil vi definere hovedklassen, og i den anden pakke vil vi definere jobs (i vores tilfælde er antallet af job fem).
Trin 3: Indsæt følgende afhængighed i filen pom.xml. Den downloader automatisk de nødvendige JAR-filer til projektet. Pom-filen ser sådan ud:
4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1
Trin 4: Opret fem job (i com.javatpoint.job-pakken), som du vil udføre. I vores tilfælde har vi defineret følgende fem jobs.
hvad er modulo 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()); } }
Trin 5: Opret 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 færdige med alle ovenstående trin, ser projektmappen sådan ud:
avl trærotation
Trin 6: Kør ovenstående Java-program for at se outputtet.
Vi observerer, at hvert job udføres med et bestemt tidsinterval.