logo

Java Cron Expression

A technológia napról napra folyamatosan változik. Néha időnként egy feladatot kell végrehajtanunk a szerveren. A feladat kézi futtatása a kiszolgálón nehéz feladat, így a felhasználó vagy a rendszergazda nem tudja többször elvégezni. A probléma megoldása érdekében Cron segíti a programozót abban, hogy rendszeresen végrehajtson egy feladatot a szerveren. Széles körben használják automatizált rendszerkarbantartásra és csodálatra. Ezen kívül még használhatjuk Cron kifejezés webfejlesztésben. Számos olyan helyzet adódhat, amikor egy webalkalmazásnak időnként végre kell hajtania egy bizonyos feladatot.

Ebben a részben a Java Cron kifejezések , működik és végrehajtása is folyamatban van Java Quartz ütemező .

Mi az a Cron?

Alapvetően a Cron egy olyan segédprogram, amely ütemez egy feladatot. Lehetővé teszi a felhasználó számára, hogy időközönként ütemezzen egy feladatot meghatározott időben, dátumon, hónapon, gyenge ponton és évben. Széles körben használják automatizált folyamatokban, ahol nincs szükség emberi beavatkozásra.

Java Cron Expression

Cron kifejezés

Java-ban a Cron kifejezések a példányok konfigurálására szolgálnak CronTrigger osztály. Ez egy alosztálya org.quartz.Trigger osztály. A Cron kifejezés hat vagy hét mezőből (időegységből) álló karakterlánc vagy kifejezés. Leírja az ütemezés és a parancs egyes részleteit.

 

A cron kifejezés lehet egyszerű és összetett is. Például,

Egyszerű: * * * * ? * (a csillag a mezőket jelöli)

Összetett: 0 0/4 12,15,3-35,52 ? Május, június, július KE-SZO 2002-2010.

mikor találták fel az első számítógépet

Vegye figyelembe azt is, hogy a Cron kifejezések különböző stílusokban írhatók, az alábbiak szerint. Például a következő három Cron kifejezésnek ugyanaz a jelentése.

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

Mindhárom kifejezés minden nap 9:10-kor hajtódik végre.

A Cron kifejezésben használt mezők

A Cron kifejezésekben az időegységet úgy ismerjük, mint terület . Ezek szóközzel vannak elválasztva, tartalmazhatják bármelyik engedélyezett értéket az adott mezőben engedélyezett karakterek különböző kombinációival. A mezőket a várt sorrendben jeleníti meg. A következő táblázat az időegységet és a megfelelő értékeket, valamint a kifejezésekhez használható szimbólumokat mutatja be.

Mező neve Kívánt Engedélyezett értékek Engedélyezett speciális karakterek és szimbólumok mezőkkel
Másodpercek Igen 0-59 , - * /
Percek Igen 0-59 , - * /
Órák Igen 0-23 , - * /
A hónap napja Igen -31 , - * ? / L W C
Hónap Igen 0-11 vagy JAN-DEC , - * /
A hét napja Igen 1-7 vagy V-SZOM , - * ? / L C #
Év Választható üres vagy 1970-2099 , - * /

A Cron kifejezésben használt speciális szimbólumok és betűk

Csillag (*): A szimbólumot akkor használjuk, ha minden időegységben (perc, másodperc, óra) szeretnénk eseményt végrehajtani. Például, ha a *-t a perc időmértékkel együtt használjuk, az azt jelenti, hogy egy esemény minden percben automatikusan végrehajtásra kerül.

Kérdőjel (?): A szimbólumot olyan mezőkben használják, mint a hónap napja és a hét napja. Tetszőleges értéket jelöl, és figyelmen kívül hagyja a mezők értékét. Tegyük fel, hogy minden hónap 2. napján szeretnénk végrehajtani egy szkriptet anélkül, hogy törődnénk azzal, hogy a hét melyik napja esik a hónap 2. napjára. Ebben az esetben meg kell adnunk egy kérdőjel szimbólumot ( ?) a hét napja mezőben.

Kötőjel (-): A szimbólum a tartomány megadására szolgál. Meghatározza az értéktartományt. Például, ha egy óra mező a következőképpen van definiálva , azt jelenti, hogy egy esemény a 4. és 5. órában kerül végrehajtásra.

Vessző (,): A vesszővel elválasztott mezők értékeinek meghatározására szolgál. Például P, Szo, V stb.

Perjel (/): A megadott időegység értékeinek növelésére szolgál. Tegyük fel, hogy egy eseményt 10 percnél akarunk elindítani, utána ugyanazt az eseményt 20 percnél kell végrehajtanunk, a következő végrehajtást 30 percnél, és így tovább. Ebben az esetben a kezdési időpontot és az inkrementális értéket adjuk meg perjellel elválasztva.

Például ha 10/10 a perc mezőben megadva, az első esemény végrehajtását 10 perccel, a következő végrehajtást pedig az óra 20 percében jelenti, és így nem.

L (utolsó): Az L használatának eltérő jelentése van a különböző mezőkben.

  • Ha már használták a mező, a naptár szerint a hónap utolsó napját jelöli.
  • Ha olyan eltolási értékkel használták, mint pl L-5 . Jelzi az 5thnaptári hónap utolsó napjáig.
  • Ha már használták a mező, a hét utolsó napját jelöli. Más értékekkel is használható a mezőben. Például, 7L jelöli a múlt szombaton .

BAN BEN: Az utóbbi a hétköznapokat jelenti (hétfőtől péntekig). Meghatározza azt a hétköznapot, amelyik a legközelebb van a hónap meghatározott napjához.

Például ha megadjuk 5W a hónap napja mezőben azt jelenti, hogy w határozza meg a hét napját az 5-höz közeltha hónap.

  • Ha az 5tha hónap az szombat , egy esemény aktiválódik 9th a hónap.
  • Ha az 5tha hónap az vasárnap , egy esemény aktiválódik tizenegyth a hónap.

Lehetséges más eset is. Tegyük fel , 1utcaa hónap szombat, az esemény 3-án leszrda hónap. Ez azt jelenti, hogy az esemény vagy a szkript nem fut le az előző hónapban.

Hash (#): A hónap hétköznapjainak n-edik előfordulását jelenti. Például a hónap harmadik pénteke jelölhető 6#3 .

Miért használjunk cron kifejezéseket?

A cron kifejezések használatának számos oka van. Néhány közülük:

  • A gyorsítótárazott adatfájlokat bizonyos időközönként lejárhatjuk és törölhetjük.
  • Napi hírlevelet és e-mailt tudunk ütemezni.
  • A régóta futó feladatokat beütemezhetjük úgy, hogy parancssori szkriptből fussanak, nem pedig webes szkriptből. Például videók kódolása vagy tömeges e-mailek küldése.

Példa a Cron kifejezésekre

Lássunk néhány gyakori Cron kifejezést, amely speciális szimbólumokat és mezőket használ.

Cron kifejezés A Cron kifejezések jelentése
0 12 * * ? Ez azt jelenti, hogy egy feladatot minden nap 12:00-kor (délben) hajtanak végre.
0/5 13,18 * * ? Ez azt jelenti, hogy egy munka minden nap 13:55-kor kezdődik és 13:55-kor ér véget, majd 18:55-kor kezdődik és 18:55-kor ér véget.
0-5 13 * * ? Azt jelzi, hogy egy feladat minden nap 13:05-től 13:05-ig minden percben végrehajtásra kerül.
15,45 13 ? 6 ked Ez azt jelenti, hogy egy munkát június hónapban minden kedden 13:15-kor és 13:45-kor hajtanak végre.
30 9? * H-P Azt jelzi, hogy egy feladatot minden hétfőn, kedden, szerdán, csütörtökön és pénteken reggel 9:30-kor hajtanak végre.
30 9 15 * ? Ez azt jelenti, hogy egy feladatot minden hónap 15. napján reggel 9:30-kor hajtanak végre.
0 18 L * ? Ez azt jelenti, hogy egy feladatot minden hónap utolsó napján 18 órakor hajtanak végre.
0 18 L-3 * ? Ez azt jelenti, hogy egy feladatot minden hónap harmadik napjának utolsó napján 18 órakor hajtanak végre.
30 10 ? *5L Azt jelzi, hogy egy feladatot minden hónap utolsó csütörtökén 10:30-kor hajtanak végre.
0 10 ? * 23 Ez azt jelenti, hogy egy feladatot minden hónap harmadik hétfőjén délelőtt 10 órakor hajtanak végre.
0 0 10/5 * ? Ez azt jelenti, hogy egy munkát minden nap éjfélkor 12-kor hajtanak végre öt napon keresztül, a hónap 10. napjától kezdődően.
0 11 11 11 11 ? Azt jelzi, hogy egy feladatot minden november 11-én 11:11-kor hajtanak végre
0 15 10 ? * 6L 2002-2005 Tűz minden hónap utolsó péntekén 10:15-kor 2002-ben, 2003-ban, 2004-ben és 2005-ben.
0 0 0? * SAJÁT #1 Azt jelzi, hogy a munka a hónap első hétfőjén éjfélkor kerül végrehajtásra.
0 0 0 LW Azt jelzi, hogy egy munka a hónap utolsó hétköznapján éjfélkor kerül végrehajtásra.
0 0/30 8-10 * * * Ez azt jelenti, hogy egy munka minden nap 8:00, 8:30, 9:00, 9:30, 10:00 és 10:30-kor kerül végrehajtásra.

Speciális beállítás a Cron kifejezésekben

A fenti speciális szimbólum mellett a Cron kifejezés néhány előre meghatározott speciális értéket is támogat. Ezek az értékek használhatók a mezők helyett.

    @évente vagy @évente:Évente egyszer végez munkát. Például, '0 0 0 1 1 *' .@havi: Havonta egyszer működik. Például, „0 0 0 1 * *”. @heti: Hetente egyszer működik. Például, '0 0 0 * * 0'. @napi vagy @midnight:Naponta egyszer működik. Például, „0 0 0 * * *”. @óránkénti: Óránként működik. Például, „0 0 * * * *”.

A Cron Expression használata Java-ban

A Java nyílt forráskódú feladatütemező rendszert biztosít, amely egy adott időegységre ütemez egy feladatot. A Quartz ütemezőt letölthetjük a hivatalos oldalról.

A programozás szempontjából a job egy olyan osztály, amely tartalmazza a végrehajtandó feladatot. De a kérdés az, hogyan kell ütemezni. Egy job ütemezéséhez definiálunk egy triggert, és megadjuk, hogy a job mikor fog végrehajtásra kerülni.

Ha a Quartz ütemezőt szeretnénk megvalósítani, hozzáadhatjuk a függőséget az alábbiak szerint:

 org.quartz-scheduler quartz 2.2.1 

Megjegyzés: A következő Java program végrehajtása előtt győződjön meg arról, hogy hozzáadta kvarc-2.2.1.korsó fájlt az elérési útba, különben hibát kap.

Nézzük meg a cron kifejezés és a job megvalósítását egy Java programon keresztül.

1. lépés: Hozzon létre egy Maven projektet. névvel hoztuk létre CronPélda .

2. lépés: A projekten belül hozzon létre két csomagot com.javatpoint.app és com.javatpoint.job . Az első csomagban a fő osztályt, a másodikban pedig a munkaköröket (esetünkben a munkakörök száma öt) definiáljuk.

3. lépés: Illessze be a következő függőséget a pom.xml fájlba. Automatikusan letölti a projekthez szükséges JAR fájlokat. A pom fájl így néz ki:

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

4. lépés: Hozzon létre öt végrehajtani kívánt feladatot (a com.javatpoint.job csomagban). Esetünkben a következő öt munkakört határoztuk meg.

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

5. lépés: Hozd létre a fő osztályt MyApp néven.

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

Ha az összes fenti lépést elvégeztük, a projektkönyvtár így néz ki:

Java Cron Expression

6. lépés: Futtassa a fenti Java programot a kimenet megtekintéséhez.

Java Cron Expression

Megfigyeljük, hogy minden munka meghatározott időintervallumban fut.