Технологија се стално мења из дана у дан. Понекад се од нас тражи да повремено извршавамо посао на серверу. Ручно покретање посла на серверу је тежак задатак, тако да га корисник или администратор не може урадити више пута. Да бисте решили овај проблем, Црон помаже програмеру да периодично извршава посао на серверу. Широко се користи за аутоматизовано одржавање система и дивљење. Поред овога, такође можемо користити Црон израз у веб развоју. Постоје многе ситуације када ће веб апликација можда морати периодично да извршава одређени задатак.
У овом одељку ћемо разговарати о Јава Црон изрази , ради и имплементира се Јава Куартз планер .
Шта је Црон?
У основи, Црон је услужни програм који заказује задатак. Омогућава кориснику да периодично закаже задатак у одређено време, датум, месец, слаб и годину. Широко се користи у аутоматизованим процесима где није потребна људска интервенција.
Црон Екпрессион
У Јави, Црон изрази се користе за конфигурисање инстанци ЦронТриггер класа. То је поткласа орг.куартз.Триггер класа. Црон израз је стринг или израз који се састоји од шест или седам поља (временска јединица). Описује појединачне детаље распореда и команде.
Црон израз може бити једноставан и сложен. На пример,
инсталирај мавен
једноставно: * * * * ? * (звездица означава поља)
Комплекс: 0 0/4 12,15,3-35,52 ? Мај, јун, јул УТО-СУБ 2002-2010.
Такође, имајте на уму да Црон израз може бити написан у различитим стиловима, на следећи начин. На пример, следећа три Црон израза имају исто значење.
- 0 10 9 ? * *
- 0 10 9 * * ?
- 0 10 9 * * ? *
Сва три израза, извршавају се сваког дана у 9:10.
Поља која се користе у Црон изразу
У Црон изразима, временска јединица је позната као поље . Оне су раздвојене размаком, могу садржати било коју од дозвољених вредности са различитим комбинацијама дозвољених знакова за то поље. Приказује поља у очекиваном редоследу. Следећа табела приказује временску јединицу и одговарајуће вредности, као и симболе који се могу користити са изразима.
Име поља | Потребан | Дозвољене вредности | Дозвољени посебни знакови и симболи са пољима |
---|---|---|---|
Секунде | да | 0-59 | , - * / |
Минута | да | 0-59 | , - * / |
Сати | да | 0-23 | , - * / |
Дан у месецу | да | -31 | , - * ? / Л В Ц |
Месец дана | да | 0-11 или ЈАНУАР-ДЕЦ | , - * / |
Дан у недељи | да | 1-7 или НЕД-СУБ | , - * ? / Л Ц # |
Година | Опционо | празан или 1970-2099 | , - * / |
Специјални симболи и слова који се користе у Црон изразу
Звездица (*): Симбол се користи када желимо да извршимо догађај у свакој временској јединици (минута, секунда, сат). На пример, ако се * користи са временском јединицом минута, то значи да ће се догађај извршавати сваког минута, аутоматски.
Знак питања (?): Симбол се користи у пољима као што су дан у месецу и дан у недељи. Означава произвољну вредност и игнорише вредност поља. Претпоставимо да желимо да извршимо скрипт 2. у месецу без обзира на то који дан у недељи пада на 2. дан у месецу. У овом случају, требало би да наведемо симбол знака питања ( ?) у пољу дан у недељи.
цртица (-): Симбол се користи за одређивање опсега. Одређује опсег вредности. На пример, ако је поље сата дефинисано као , значи да ће се догађај извршити у 4. и 5. сат.
Зарез (,): Користи се за дефинисање вредности поља одвојених зарезом. На пример, пет, суб, нед, итд.
Коса црта (/): Користи се за повећање вредности наведене временске јединице. Претпоставимо да желимо да покренемо догађај у 10 минута, након тога од нас се тражи да извршимо исти догађај на 20 минута, следеће извршење на 30 минута, итд. У овом случају наводимо време почетка и инкременталну вредност, одвојене косом цртом унапред.
На пример, ако 10/10 у наведеном у пољу минута, то значи да ће се први догађај извршити у 10 минута, а следеће извршење ће бити у 20 минута од једног сата, и тако не.
Л (последњи): Употреба Л има различито значење у различитим пољима.
- Ако је коришћен у поље, означава последњи дан у месецу, према календару.
- Ако је коришћен са вредношћу помака као што је Л-5 . Означава 5тхдо последњег дана календарског месеца.
- Ако је коришћен у поље, означава последњи дан у недељи. Такође се може користити са другом вредношћу у пољу. На пример, 7Л означава прошле суботе .
У: Касније представља радне дане (од понедељка до петка). Одређује дан у недељи који је најближи наведеном дану у месецу.
На пример, ако наведемо 5В у пољу дан у месецу, то значи да в одређује дан у недељи близу 5тхмесеца.
- Ако је 5тхмесеца је Субота , догађај ће се покренути 9тх месеца.
- Ако је 5тхмесеца је недеља , догађај ће се покренути Једанаесттх месеца.
Можда постоји још један случај. Претпоставимо , 1сту месецу је субота, догађај ће се десити 3рдмесеца. То значи да се догађај или скрипта неће извршити у претходном месецу.
Хеш (#): Представља н-ту појаву радног дана у месецу. На пример, трећи петак у месецу се може означити као 6#3 .
Зашто би требало да користимо црон изразе?
Постоје различити разлози за коришћење црон израза. Неки од њих су:
- Можемо истећи и избрисати кеширане датотеке са подацима у одређеном интервалу.
- Можемо заказати дневне вести и е-маилове.
- Можемо да закажемо дуготрајне задатке да се покрећу из скрипте командне линије, уместо да се изводе из веб скрипте. На пример, кодирање видео записа или слање масовних е-порука.
Пример Црон израза
Хајде да видимо неке уобичајене Црон изразе који користе посебне симболе и поља.
Црон Екпрессион | Значење Црон израза |
---|---|
0 12 * * ? | Означава да ће се посао извршавати у 12:00 (подне) сваког дана. |
0/5 13.18 * * ? | Означава да ће се посао извршавати сваких пет минута почевши од 13 часова и завршавајући се у 13:55, а затим почевши од 18 часова и завршавајући се у 18:55, сваког дана. |
0-5 13 * * ? | Означава да ће се посао извршавати сваког минута почевши од 13 часова и завршавајући се у 13:05, сваког дана. |
15,45 13 ? 6 уто | Означава да ће се посао обављати у 13:15 и 13:45 сваког уторка у јуну. |
30 9? * ПОН-ПЕТ | Означава да ће се посао обављати у 9:30 сваког понедељка, уторка, среде, четвртка и петка. |
30 9 15 * ? | Означава да ће се посао извршити у 9:30 ујутро 15. дана у месецу. |
0 18 Л * ? | Означава да ће се посао извршити у 18 часова последњег дана у месецу. |
0 18 Л-3 * ? | Означава да ће се посао извршити у 18 часова трећег до последњег дана у месецу. |
30 10 ? *5Л | Означава да ће се посао извршити у 10:30 ујутру последњег четвртка у месецу. |
0 10 ? * 23 | Означава да ће се посао обавити сваког трећег понедељка у 10 часова ујутру. |
0 0 10/5 * ? | Означава да ће се посао извршавати сваког дана у 12 поноћи пет дана почевши од 10. дана у месецу. |
0 11 11 11 11 ? | Означава да ће се посао извршавати сваког 11. новембра у 11:11 |
0 15 10 ? * 6Л 2002-2005 | Пожар у 10:15 сваког последњег петка у месецу током 2002, 2003, 2004. и 2005. године. |
0 0 0 ? * МОЈ #1 | Означава да ће се посао извршити првог понедељка у месецу у поноћ. |
0 0 0 ЛВ * * | Означава да ће се посао извршити последњег радног дана у месецу у поноћ. |
0 0/30 8-10 * * * | Означава да ће се посао извршавати у 8:00, 8:30, 9:00, 9:30, 10:00 и 10:30 сваког дана. |
Посебна поставка у Црон изразима
Поред горе наведеног специјалног симбола, Црон израз такође подржава неке унапред дефинисане специјалне вредности. Ове вредности се могу користити уместо поља.
Коришћење Црон Екпрессион у Јави
Јава пружа систем за планирање послова отвореног кода који планира посао за одређену временску јединицу. Куартз планер можемо преузети са званичног сајта.
разлика у датумима у Екцелу
У смислу програмирања, посао је класа која садржи задатак који треба извршити. Али питање је како то заказати. За заказивање посла дефинишемо окидач и наведемо када ће се посао извршити.
Ако желимо да имплементирамо Куартз планер, можемо додати зависност, на следећи начин:
org.quartz-scheduler quartz 2.2.1
Напомена: Пре него што покренете следећи Јава програм, проверите да ли сте га додали кварц-2.2.1.јар датотеку на путањи, иначе ћете добити грешку.
Хајде да видимо имплементацију црон израза и посла кроз Јава програм.
Корак 1: Креирајте Мавен пројекат. Креирали смо са именом ЦронЕкампле .
Корак 2: Унутар пројекта креирајте два пакета, наиме цом.јаватпоинт.апп и цом.јаватпоинт.јоб . У првом пакету ћемо дефинисати главну класу а у другом пакету ћемо дефинисати послове (у нашем случају број послова је пет).
Корак 3: У датотеку пом.кмл налепите следећу зависност. Аутоматски преузима потребне ЈАР датотеке за пројекат. Пом датотека изгледа овако:
4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1
4. корак: Креирајте пет послова (у пакету цом.јаватпоинт.јоб) које желите да извршите. У нашем случају дефинисали смо следећих пет послова.
Јоб1.јава
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()); } }
Јоб2.јава
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()); } }
Јоб3.јава
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()); } }
Јоб4.јава
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()); } }
Јоб5.јава
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()); } }
5. корак: Креирајте главну класу са именом МиАпп.
МиАпп.јава
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(); } } }
Када завршимо са свим горњим корацима, директоријум пројекта изгледа овако:
Корак 6: Покрените горњи Јава програм да видите излаз.
логика преноса регистра
Примећујемо да се сваки посао извршава у одређеном временском интервалу.