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.
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.
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:
6. lépés: Futtassa a fenti Java programot a kimenet megtekintéséhez.
Megfigyeljük, hogy minden munka meghatározott időintervallumban fut.