logo

Java Cron Expression

Technológia sa neustále mení zo dňa na deň. Niekedy sa od nás vyžaduje periodické vykonávanie úlohy na serveri. Ručné spustenie úlohy na serveri je náročná úloha, takže ju používateľ alebo správca nemôže vykonať viackrát. Ak chcete tento problém vyriešiť, Cron pomáha programátorovi pravidelne vykonávať úlohu na serveri. Je široko používaný na automatizovanú údržbu a obdivovanie systému. Okrem toho môžeme použiť aj Cron výraz vo vývoji webu. Existuje veľa situácií, keď webová aplikácia môže potrebovať vykonávať určitú úlohu pravidelne.

V tejto časti budeme diskutovať o Výrazy Java Cron , funguje a implementuje sa Java Quartz plánovač .

čo je Cron?

Cron je v podstate nástroj, ktorý naplánuje úlohu. Umožňuje používateľovi naplánovať si úlohu pravidelne v určený čas, dátum, mesiac, slabosť a rok. Je široko používaný v automatizovaných procesoch, kde nie je potrebný ľudský zásah.

Java Cron Expression

Cron Expression

V jazyku Java sa výrazy Cron používajú na konfiguráciu inštancií CronTrigger trieda. Je to podtrieda org.quartz.Trigger trieda. Cron výraz je reťazec alebo výraz pozostávajúci zo šiestich alebo siedmich polí (časová jednotka). Popisuje jednotlivé detaily rozvrhu a príkazu.

 

Cron výraz môže byť jednoduchý aj zložitý. Napríklad,

jednoduché: * * * * ? * (hviezdička označuje polia)

komplex: 0 0/4 12,15,3-35,52 ? Máj, jún, júl UT-SO 2002-2010.

Všimnite si tiež, že výraz Cron môže byť napísaný v rôznych štýloch, a to nasledovne. Napríklad nasledujúce tri výrazy Cron majú rovnaký význam.

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

Všetky tri výrazy vykonajte každý deň o 9:10.

konverzia z reťazca na int v jazyku Java

Polia používané vo výraze Cron

Vo výrazoch Cron je časová jednotka známa ako lúka . Tieto sú oddelené medzerou, môžu obsahovať ľubovoľnú z povolených hodnôt s rôznymi kombináciami povolených znakov pre dané pole. Zobrazuje polia v očakávanom poradí. Nasledujúca tabuľka zobrazuje jednotku času a zodpovedajúce hodnoty a symboly, ktoré možno použiť s výrazmi.

Názov poľa Požadovaný Povolené hodnoty Povolené špeciálne znaky a symboly s poľami
sekúnd Áno 0-59 , - * /
Minúty Áno 0-59 , - * /
Hodiny Áno 0-23 , - * /
Deň v mesiaci Áno -31 , - * ? / L W C
mesiac Áno 0-11 alebo JAN-DEC , - * /
Deň v týždni Áno 1-7 alebo NE-SO , - * ? / L C #
rok Voliteľné prázdne alebo 1970-2099 , - * /

Špeciálne symboly a písmená používané vo výraze Cron

Hviezdička (*): Symbol sa používa, keď chceme vykonať udalosť v každej časovej jednotke (minúta, sekunda, hodina). Napríklad, ak sa * použije s minútovou časovou jednotkou, znamená to, že udalosť sa automaticky spustí každú minútu.

Otáznik (?): Symbol sa používa v poliach ako deň v mesiaci a deň v týždni. Označuje ľubovoľnú hodnotu a ignoruje hodnotu polí. Predpokladajme, že chceme spustiť skript 2. dňa každého mesiaca bez toho, aby sme sa starali o to, ktorý deň v týždni pripadá na 2. deň v mesiaci. V tomto prípade by sme mali zadať symbol otáznika ( ?) v poli deň v týždni.

Spojovník (-): Symbol sa používa na určenie rozsahu. Určuje rozsah hodnôt. Napríklad, ak je pole hodín definované ako , znamená, že udalosť sa uskutoční o 4. a 5. hodine.

Čiarka (,): Používa sa na definovanie hodnôt polí oddelených čiarkou. Napríklad Pi, So, Ne atď.

Lomka (/): Používa sa na zvýšenie hodnôt zadanej časovej jednotky. Predpokladajme, že chceme spustiť udalosť o 10 minútach, potom sme povinní vykonať rovnakú udalosť o 20 minút, ďalšie spustenie o 30 minút atď. V tomto prípade zadáme čas začiatku a prírastkovú hodnotu oddelené lomkou.

Napríklad, ak 10/10 v uvedenom v poli minúta to znamená, že prvá udalosť sa vykoná o 10 minút a ďalšie vykonanie bude o 20 minút v hodine, takže nie.

L (posledný): Použitie L má v rôznych oblastiach rôzny význam.

ako otvoriť súbor json
  • Ak bol použitý v pole označuje posledný deň v mesiaci podľa kalendára.
  • Ak bol použitý s hodnotou offsetu, napr L-5 . Označuje 5thdo posledného dňa kalendárneho mesiaca.
  • Ak bol použitý v pole, označuje posledný deň v týždni. Dá sa použiť aj s inou hodnotou v poli. Napríklad, 7L označuje minulú sobotu .

IN: Neskoršie predstavuje pracovné dni (pondelok až piatok). Určuje deň v týždni, ktorý je najbližšie k určenému dňu v mesiaci.

Napríklad, ak špecifikujeme 5 W v poli deň v mesiaci to znamená, že w určuje deň v týždni blízko 5thmesiaca.

  • Ak 5thmesiaca je sobota , udalosť sa spustí 9th mesiaca.
  • Ak 5thmesiaca je nedeľu , udalosť sa spustí jedenásťth mesiaca.

Môže existovať aj iný prípad. Predpokladajme , 1svv mesiaci je sobota, udalosť sa uskutoční 3rdmesiaca. Znamená to, že udalosť alebo skript sa nevykoná v predchádzajúcom mesiaci.

Hash (#): Predstavuje n-tý výskyt dňa v týždni v mesiaci. Napríklad tretí piatok v mesiaci možno označiť ako 6#3 .

Prečo by sme mali používať cron výrazy?

Existujú rôzne dôvody na používanie výrazov cron. Niektoré z nich sú:

  • V určitých intervaloch môžeme uplynúť platnosť a vymazať dátové súbory uložené vo vyrovnávacej pamäti.
  • Môžeme naplánovať denné novinky a e-maily.
  • Dlhodobé úlohy môžeme naplánovať tak, aby sa spúšťali zo skriptu príkazového riadka, a nie z webového skriptu. Napríklad kódovanie videí alebo rozosielanie hromadných e-mailov.

Príklad Cronových výrazov

Pozrime sa na niektoré bežné výrazy Cron, ktoré používajú špeciálny symbol a polia.

Cron Expression Význam Cronových výrazov
0 12 * * ? Znamená to, že úloha sa vykoná každý deň o 12:00 (poludnie).
0/5 13,18 * * ? Znamená to, že úloha sa vykoná každých päť minút, počnúc 13:00 a končiac o 13:55 a potom začína o 18:00 a končiac o 18:55, každý deň.
0-5 13 * * ? Znamená, že úloha sa vykoná každú minútu od 13:00 do 13:05 každý deň.
15,45 13 ? 6. ut Znamená to, že úloha sa vykoná o 13:15 a 13:45 každý utorok v mesiaci jún.
30 9? * PO-PIA Znamená to, že úloha sa vykoná o 9:30 každý pondelok, utorok, stredu, štvrtok a piatok.
30 9 15 * ? Znamená to, že úloha sa vykoná o 9:30 v 15. deň každého mesiaca.
0 18 l * ? Znamená to, že úloha sa vykoná o 18:00 v posledný deň každého mesiaca.
0 18 L-3 * ? Znamená to, že úloha sa vykoná o 18:00 v tretí až posledný deň každého mesiaca.
30 10 ? *5 l Znamená to, že úloha sa vykoná o 10:30 posledný štvrtok v mesiaci.
0 10? * 23 Znamená to, že úloha sa vykoná o 10:00 v tretí pondelok v mesiaci.
0 0 10/5 * ? Znamená to, že úloha sa vykoná každý deň o 12:00 počas piatich dní počnúc 10. dňom v mesiaci.
0 11 11 11 11 ? Znamená to, že úloha sa vykoná každého 11. novembra o 11:11
0 15 10 ? * 6L 2002-2005 Vypáľte o 10:15 každý posledný piatok každého mesiaca v rokoch 2002, 2003, 2004 a 2005.
0 0 0 ? *MOJE #1 Označuje, že úloha sa vykoná prvý pondelok v mesiaci o polnoci.
0 0 0 LW * * Označuje, že úloha sa vykoná posledný pracovný deň v mesiaci o polnoci.
0 0/30 8-10 * * * Znamená to, že úloha sa vykoná každý deň o 8:00, 8:30, 9:00, 9:30, 10:00 a 10:30.

Špeciálne nastavenie v Cron Expressions

Okrem vyššie uvedeného špeciálneho symbolu podporuje výraz Cron aj niektoré preddefinované špeciálne hodnoty. Tieto hodnoty možno použiť namiesto polí.

    @ročne alebo @ročne:Vykonáva prácu raz za rok. Napríklad, '0 0 0 1 1 *' .@mesačne: Úlohu spúšťa raz za mesiac. Napríklad, '0 0 0 1 * *'. @týždenne: Úlohu spúšťa raz za týždeň. Napríklad, '0 0 0 * * 0'. @denne alebo @polnoc:Vykonáva prácu raz denne. Napríklad, '0 0 0 * * *'. @hodinová: Pracuje každú hodinu. Napríklad, '0 0 * * * *'.

Použitie výrazu Cron v jazyku Java

Java poskytuje systém plánovania úloh s otvoreným zdrojom, ktorý naplánuje úlohu na určitú časovú jednotku. Plánovač Quartz si môžeme stiahnuť z oficiálnej stránky.

Z hľadiska programovania je úloha trieda, ktorá obsahuje úlohu, ktorá sa má vykonať. Otázkou však je, ako to naplánovať. Pre plánovanie úlohy definujeme spúšťač a špecifikujeme, kedy sa úloha vykoná.

Ak chceme implementovať plánovač Quartz, môžeme pridať závislosť takto:

zoznam na java
 org.quartz-scheduler quartz 2.2.1 

Poznámka: Pred spustením nasledujúceho programu Java sa uistite, že ste ho pridali kremeň-2.2.1.jar súbor v ceste, inak sa zobrazí chyba.

Pozrime sa na implementáciu výrazu a úlohy cron prostredníctvom programu Java.

Krok 1: Vytvorte projekt Maven. Vytvorili sme s názvom CronExample .

Krok 2: V rámci projektu vytvorte dva balíčky com.javatpoint.app a com.javatpoint.job . V prvom balíku zadefinujeme hlavnú triedu a v druhom balíku definujeme úlohy (v našom prípade je počet úloh päť).

Krok 3: Do súboru pom.xml prilepte nasledujúcu závislosť. Automaticky stiahne potrebné súbory JAR pre projekt. Súbor pom vyzerá takto:

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

Krok 4: Vytvorte päť úloh (v balíku com.javatpoint.job), ktoré chcete vykonať. V našom prípade sme definovali nasledujúcich päť pracovných miest.

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()); } } 

Krok 5: Vytvorte hlavnú triedu s názvom 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(); } } } 

Keď dokončíme všetky vyššie uvedené kroky, adresár projektu vyzerá takto:

tostring v jazyku java
Java Cron Expression

Krok 6: Ak chcete zobraziť výstup, spustite vyššie uvedený program Java.

Java Cron Expression

Pozorujeme, že každá úloha sa vykonáva v určitom časovom intervale.