logo

Výraz Java Cron

Technologie se neustále mění den za dnem. Někdy se od nás vyžaduje, abychom na serveru periodicky vykonávali úlohu. Ruční spuštění úlohy na serveru je obtížný úkol, takže jej uživatel nebo správce nemůže provést vícekrát. Chcete-li tento problém vyřešit, Cron pomáhá programátorovi pravidelně provádět úlohu na serveru. Je široce používán pro automatizovanou údržbu systému a obdiv. Kromě toho můžeme také použít Cron výraz ve vývoji webu. Existuje mnoho situací, kdy webová aplikace může potřebovat provádět určitou úlohu pravidelně.

V této části budeme diskutovat o Výrazy Java Cron , funguje a implementuje se Plánovač Java Quartz .

Co je Cron?

Cron je v podstatě nástroj, který naplánuje úlohu. To umožňuje uživateli naplánovat úkol pravidelně na zadaný čas, datum, měsíc, slabý a rok. Je široce používán v automatizovaných procesech, kde není vyžadován lidský zásah.

Výraz Java Cron

Cron Expression

V Javě se Cron výrazy používají ke konfiguraci instancí CronTrigger třída. Je to podtřída org.quartz.Trigger třída. Cron výraz je řetězec nebo výraz sestávající ze šesti nebo sedmi polí (časová jednotka). Popisuje jednotlivé detaily rozvrhu a příkazu.

 

Cron výraz může být jednoduchý i složitý. Například,

Jednoduchý: * * * * ? * (hvězdička označuje pole)

je prázdná java

Komplex: 0 0/4 12,15,3-35,52 ? Květen, červen, červenec ÚT-SO 2002-2010.

Všimněte si také, že výraz Cron lze napsat v různých stylech, a to následovně. Například následující tři výrazy Cron mají stejný význam.

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

Všechny tři výrazy provádějte každý den v 9:10.

Pole použitá ve výrazu Cron

Ve výrazech Cron je časová jednotka známá jako pole . Ty jsou odděleny mezerou, mohou obsahovat jakoukoli z povolených hodnot s různými kombinacemi povolených znaků pro dané pole. Zobrazuje pole v očekávaném pořadí. Následující tabulka znázorňuje časovou jednotku a odpovídající hodnoty a symboly, které lze s výrazy použít.

Název pole Požadované Povolené hodnoty Povolené speciální znaky a symboly s poli
Sekundy Ano 0-59 , - * /
Minut Ano 0-59 , - * /
hodiny Ano 0-23 , - * /
den v měsíci Ano -31 ,- * ? / L W C
Měsíc Ano 0-11 nebo JAN-DEC , - * /
Den v týdnu Ano 1-7 nebo NE-SO ,- * ? / L C #
Rok Volitelný prázdné nebo 1970-2099 , - * /

Speciální symboly a písmena používané ve výrazu Cron

Hvězdička (*): Symbol se používá, když chceme provést událost v každé časové jednotce (minuta, sekunda, hodina). Pokud je například * použito s minutovou časovou jednotkou, znamená to, že událost se automaticky spustí každou minutu.

Otazník (?): Symbol se používá v polích jako den v měsíci a den v týdnu. Označuje libovolnou hodnotu a ignoruje hodnotu polí. Předpokládejme, že chceme spustit skript 2. dne každého měsíce, aniž bychom se starali o to, který den v týdnu připadá na 2. den v měsíci. V tomto případě bychom měli zadat symbol otazníku ( ?) v poli den v týdnu.

Spojovník (-): Symbol se používá k určení rozsahu. Určuje rozsah hodnot. Pokud je například pole hodin definováno jako , znamená, že událost se spustí ve 4. a 5. hodinu.

Čárka (,): Používá se k definování hodnot polí oddělených čárkou. Například Pá, So, Ne atd.

Lomítko (/): Používá se ke zvýšení hodnot zadané časové jednotky. Předpokládejme, že chceme spustit událost v 10 minutách, poté jsme povinni provést stejnou událost ve 20 minutách, další provedení ve 30 minutách a tak dále. V tomto případě zadáme čas zahájení a přírůstkovou hodnotu oddělené lomítkem.

Například pokud 10/10 v zadaném poli minuty to znamená, že první událost se provede v 10 minutách a další provedení bude ve 20 minutách v hodině, takže ne.

L (poslední): Použití L má v různých oblastech různý význam.

  • Pokud byl použit v pole, označuje poslední den v měsíci podle kalendáře.
  • Pokud byl použit s hodnotou offsetu jako L-5 . Označuje 5čtdo posledního dne kalendářního měsíce.
  • Pokud byl použit v pole, označuje poslední den v týdnu. Může být také použit s jinou hodnotou v poli. Například, 7L označuje minulou sobotu .

V: Poslední představuje pracovní dny (pondělí až pátek). Určuje den v týdnu, který je nejblíže zadanému dni v měsíci.

Pokud například upřesníme 5W v poli den v měsíci to znamená, že w určuje den v týdnu blízko 5čtměsíce.

  • Pokud 5čtměsíce je sobota , událost se spustí 9čt měsíce.
  • Pokud 5čtměsíce je Neděle , událost se spustí jedenáctčt měsíce.

Může existovat jiný případ. Předpokládat , 1Svatýměsíce je sobota, událost se uskuteční 3rdměsíce. Znamená to, že událost nebo skript se v předchozím měsíci nespustí.

Hash (#): Představuje n-tý výskyt dne v týdnu v měsíci. Například třetí pátek v měsíci lze označit jako 6#3 .

Proč bychom měli používat cron výrazy?

Existuje několik důvodů, proč používat cron výrazy. Někteří z nich jsou:

  • Můžeme v určitých intervalech vypršet a vymazat datové soubory uložené v mezipaměti.
  • Můžeme naplánovat denní zpravodajství a e-maily.
  • Dlouhotrvající úlohy můžeme naplánovat tak, aby se spouštěly ze skriptu příkazového řádku, nikoli z webového skriptu. Například kódování videí nebo rozesílání hromadných e-mailů.

Příklad Cronových výrazů

Podívejme se na některé běžné výrazy Cron, které používají speciální symbol a pole.

Cron Expression Význam Cronových výrazů
0 12 * * ? Označuje, že úloha bude provedena každý den ve 12:00 (v poledne).
0/5 13,18 * * ? Označuje, že úloha se bude provádět každých pět minut počínaje 13:55 a končit ve 13:55 a poté začíná v 18:00 a končí v 18:55, každý den.
0-5 13 * * ? Označuje, že úloha se bude provádět každou minutu počínaje 13:00 a končící ve 13:05, každý den.
15,45 13 ? 6. út Označuje, že úloha bude provedena ve 13:15 a 13:45 každé úterý v měsíci červnu.
30 9? * PO-PÁ Označuje, že úloha bude provedena v 9:30 každé pondělí, úterý, středu, čtvrtek a pátek.
30 9 15 * ? Označuje, že úloha bude provedena v 9:30 15. dne každého měsíce.
0 18 L * ? Označuje, že úloha bude provedena v 18:00 posledního dne každého měsíce.
0 18 L-3 * ? Označuje, že úloha bude provedena v 18:00 třetího až posledního dne každého měsíce.
30 10? * 5 l Označuje, že úloha bude provedena v 10:30 poslední čtvrtek v měsíci.
0 10? * 23 Označuje, že úloha bude provedena v 10:00 každé třetí pondělí v měsíci.
0 0 10/5 * ? Označuje, že úloha se bude provádět každý den ve 12:00 po dobu pěti dnů počínaje 10. dnem v měsíci.
0 11 11 11 11 ? Označuje, že úloha bude provedena každého 11. listopadu v 11:11
0 15 10? * 6L 2002-2005 Požár v 10:15 každý poslední pátek každého měsíce v letech 2002, 2003, 2004 a 2005.
0 0 0? *MOJE #1 Označuje, že úloha bude provedena první pondělí v měsíci o půlnoci.
0 0 0 LW * * Označuje, že úloha bude provedena poslední pracovní den v měsíci o půlnoci.
0 0/30 8-10 * * * Znamená to, že úloha bude provedena každý den v 8:00, 8:30, 9:00, 9:30, 10:00 a 10:30.

Speciální nastavení ve výrazech Cron

Kromě výše uvedeného speciálního symbolu podporuje výraz Cron také některé předdefinované speciální hodnoty. Tyto hodnoty lze použít místo polí.

    @ročně nebo @ročně:Jednou za rok spustí zakázku. Například, '0 0 0 1 1 *' .@měsíční: Spouští úlohu jednou za měsíc. Například, '0 0 0 1 * *'. @týdně: Spouští úlohu jednou za týden. Například, '0 0 0 * * 0'. @denně nebo @půlnoc:Pracuje jednou denně. Například, '0 0 0 * * *'. @hodinově: Pracuje každou hodinu. Například, '0 0 * * * *'.

Použití Cron Expression v Javě

Java poskytuje systém plánování úloh s otevřeným zdrojovým kódem, který naplánuje úlohu na určitou časovou jednotku. Quartz plánovač si můžeme stáhnout z oficiálních stránek.

Z hlediska programování je úloha třída, která obsahuje úlohu, která má být provedena. Otázkou ale je, jak to naplánovat. Pro plánování úlohy definujeme spouštěč a specifikujeme, kdy se úloha spustí.

Pokud chceme implementovat plánovač Quartz, můžeme přidat závislost následovně:

 org.quartz-scheduler quartz 2.2.1 

Poznámka: Před spuštěním následujícího programu Java se ujistěte, že jste přidali křemen-2.2.1.jar soubor v cestě, jinak se zobrazí chyba.

Podívejme se na implementaci výrazu cron a úlohy prostřednictvím programu Java.

Krok 1: Vytvořte projekt Maven. Vytvořili jsme s názvem CronExample .

Krok 2: Uvnitř projektu vytvořte dva balíčky jmenovitě com.javatpoint.app a com.javatpoint.job . V prvním balíčku definujeme hlavní třídu a ve druhém balíčku definujeme úlohy (v našem případě je počet úloh pět).

Krok 3: Do souboru pom.xml vložte následující závislost. Automaticky stáhne požadované soubory JAR pro projekt. Soubor pom vypadá takto:

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

Krok 4: Vytvořte pět úloh (v balíčku com.javatpoint.job), které chcete provést. V našem případě jsme definovali následujících pět pracovních míst.

heapify třídit

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: Vytvořte hlavní třídu s názvem 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(); } } } 

Když dokončíme všechny výše uvedené kroky, adresář projektu vypadá takto:

Výraz Java Cron

Krok 6: Spusťte výše uvedený program Java, abyste viděli výstup.

Výraz Java Cron

Pozorujeme, že každá úloha se provádí v určitém časovém intervalu.