Tekniikka muuttuu jatkuvasti päivä päivältä. Joskus meidän on suoritettava työ ajoittain palvelimella. Työn suorittaminen palvelimella manuaalisesti on vaikea tehtävä, joten käyttäjä tai järjestelmänvalvoja ei voi tehdä sitä useita kertoja. Tämän ongelman ratkaisemiseksi Cron auttaa ohjelmoijaa suorittamaan työtä ajoittain palvelimella. Sitä käytetään laajalti automatisoituun järjestelmän ylläpitoon ja ihailuun. Tämän lisäksi voimme myös käyttää Cronin ilme verkkokehityksessä. On monia tilanteita, joissa verkkosovelluksen on ehkä suoritettava tietty tehtävä määräajoin.
tyyppimuunnos ja valu javassa
Tässä osiossa keskustelemme Java Cron -lausekkeet , se toimii ja toteutuu Java Quartz -aikataulu .
Mikä on Cron?
Pohjimmiltaan Cron on apuohjelma, joka ajoittaa tehtävän. Sen avulla käyttäjä voi ajoittaa tehtävän määräajoin tiettyyn aikaan, päivämäärään, kuukauteen, heikkoon ja vuoteen. Sitä käytetään laajalti automatisoiduissa prosesseissa, joissa ihmisen puuttumista ei tarvita.
Cron Expression
Javassa Cron-lausekkeita käytetään määrittämään esiintymiä CronTrigger luokkaa. Se on alaluokka org.quartz.Trigger luokkaa. Cron-lauseke on merkkijono tai lauseke, joka koostuu kuudesta tai seitsemästä kentästä (aikayksikkö). Se kuvaa aikataulun ja komennon yksittäisiä yksityiskohtia.
Cron-lauseke voi olla sekä yksinkertainen että monimutkainen. Esimerkiksi,
Yksinkertainen: * * * * ? * (tähti tarkoittaa kenttiä)
Monimutkainen: 0 0/4 12,15,3-35,52 ? Touko-, kesä-, heinäkuu TI-LA 2002-2010.
Huomaa myös, että Cron-lauseke voidaan kirjoittaa eri tyyleillä seuraavasti. Esimerkiksi seuraavilla kolmella Cron-lausekkeella on sama merkitys.
- 0 10 9? * *
- 0 10 9 * * ?
- 0 10 9 * * ? *
Kaikki kolme ilmaisua suoritetaan joka päivä klo 9.10.
Cron-lausekkeessa käytetyt kentät
Cron-lausekkeissa aikayksikkö tunnetaan nimellä ala . Nämä erotetaan välilyönnillä, ne voivat sisältää mitä tahansa sallittuja arvoja ja erilaisia kentän sallittujen merkkien yhdistelmiä. Se näyttää kentät odotetussa järjestyksessä. Seuraavassa taulukossa on esitetty aikayksikkö ja vastaavat arvot sekä symbolit, joita voidaan käyttää lausekkeiden kanssa.
Kenttä nimi | Edellytetään | Sallitut arvot | Sallitut erikoismerkit ja -symbolit kentillä |
---|---|---|---|
Sekuntia | Joo | 0-59 | , - * / |
Pöytäkirja | Joo | 0-59 | , - * / |
Tuntia | Joo | 0-23 | , - * / |
Kuukauden päivä | Joo | -31 | , - * ? / L W C |
Kuukausi | Joo | 0-11 tai TAMMI-JOULUKUU | , - * / |
Viikonpäivä | Joo | 1-7 tai SU-LA | , - * ? / L C # |
vuosi | Valinnainen | tyhjä tai 1970-2099 | , - * / |
Cron-ilmaisussa käytetyt erikoissymbolit ja kirjaimet
Tähti (*): Symbolia käytetään, kun halutaan suorittaa tapahtuma jokaisella aikayksiköllä (minuutti, sekunti, tunti). Jos esimerkiksi * käytetään minuuttiaikayksikön kanssa, se tarkoittaa, että tapahtuma suoritetaan joka minuutti automaattisesti.
Kysymysmerkki (?): Symbolia käytetään kentissä, kuten kuukauden päivä ja viikonpäivä. Se ilmaisee mielivaltaisen arvon ja jättää huomiotta kenttien arvon. Oletetaan, että haluamme suorittaa skriptin jokaisen kuukauden 2. päivänä välittämättä siitä, mikä viikonpäivä osuu kuukauden 2. päiväksi. Tässä tapauksessa meidän tulisi määrittää kysymysmerkkisymboli ( ?) viikonpäivän kentällä.
Tavuviiva (-): Symbolia käytetään alueen määrittämiseen. Se määrittää arvoalueen. Jos esimerkiksi tuntikenttä on määritetty muodossa , tarkoittaa tapahtumaa, joka suoritetaan 4. ja 5. tunnilla.
Pilkku (,): Sitä käytetään pilkuilla eroteltujen kenttien arvojen määrittämiseen. Esimerkiksi pe, la, su jne.
Vinoviiva (/): Sitä käytetään määritetyn aikayksikön arvojen kasvattamiseen. Oletetaan, että haluamme aloittaa tapahtuman 10 minuutin kohdalla, sen jälkeen meidän on suoritettava sama tapahtuma 20 minuutin kohdalla, seuraava suoritus 30 minuutin kohdalla ja niin edelleen. Tässä tapauksessa määritämme aloitusajan ja lisäarvon, erotettuna vinoviivalla.
Esimerkiksi jos 10/10 Minuuttikentässä määritetyssä, se tarkoittaa, että ensimmäinen tapahtuma suoritetaan 10 minuutin kuluttua ja seuraava suoritus on 20 minuutin kuluttua tunnin kuluttua, joten ei.
L (viimeinen): L:n käytöllä on eri merkitys eri aloilla.
- Jos sitä on käytetty -kenttä, se tarkoittaa kuukauden viimeistä päivää kalenterin mukaan.
- Jos sitä on käytetty offset-arvon kanssa, kuten L-5 . Se tarkoittaa 5thkalenterikuukauden viimeiseen päivään.
- Jos sitä on käytetty kenttä, se tarkoittaa viikon viimeistä päivää. Sitä voidaan käyttää myös muiden kentän arvojen kanssa. Esimerkiksi, 7L tarkoittaa viime lauantai .
SISÄÄN: Myöhempi edustaa arkipäiviä (maanantaista perjantaihin). Se määrittää viikonpäivän, joka on lähinnä määritettyä kuukauden päivää.
Esimerkiksi jos määritämme 5W kuukauden päiväkentässä se tarkoittaa, että w määrittää viikonpäivän lähellä numeroa 5thkuukauden.
- Jos 5thkuukauden on lauantai , tapahtuma käynnistyy 9th kuukauden.
- Jos 5thkuukauden on sunnuntai , tapahtuma käynnistyy yksitoistath kuukauden.
Saattaa olla toinenkin tapaus. Olettaa , 1stkuukauden on lauantai, tapahtuma järjestetään 3rdkuukauden. Se tarkoittaa, että tapahtumaa tai komentosarjaa ei suoriteta edellisen kuukauden aikana.
Hash (#): Se edustaa kuukauden arkipäivän n:ttä esiintymää. Esimerkiksi kuukauden kolmas perjantai voidaan ilmoittaa 6#3 .
Miksi meidän pitäisi käyttää cron-lausekkeita?
On useita syitä käyttää cron-lausekkeita. Jotkut niistä ovat:
- Voimme vanhentua ja tyhjentää välimuistissa olevat datatiedostot tietyin väliajoin.
- Voimme ajoittaa päivittäiset uutiskirjeet ja sähköpostit.
- Voimme ajoittaa pitkäkestoiset tehtävät suoritettavaksi komentorivikomentosarjasta sen sijaan, että suoritettaisiin se web-komentosarjasta. Kuten videoiden koodaaminen tai joukkosähköpostien lähettäminen.
Esimerkki Cron-lausekkeista
Katsotaanpa joitain yleisiä Cron-lausekkeita, jotka käyttävät erikoissymbolia ja -kenttiä.
Cron Expression | Merkitys Cron-lausekkeet |
---|---|
0 12 * * ? | Se tarkoittaa, että työ suoritetaan klo 12.00 (keskipäivällä) joka päivä. |
0/5 13.18 * * ? | Se tarkoittaa, että työ suoritetaan viiden minuutin välein alkaen klo 13.00 ja päättyen klo 13.55 ja sitten alkaa klo 18.00 ja päättyy klo 18.55, joka päivä. |
0-5 13 * * ? | Se tarkoittaa, että työ suoritetaan joka minuutti alkaen klo 13.00 ja päättyen klo 13.05, joka päivä. |
15,45 13 ? 6 ti | Se tarkoittaa, että työ suoritetaan klo 13.15 ja 13.45 joka tiistai kesäkuussa. |
30 9? * MA-PE | Se tarkoittaa, että työ suoritetaan klo 9.30 joka maanantai, tiistai, keskiviikko, torstai ja perjantai. |
30 9 15 * ? | Se tarkoittaa, että työ suoritetaan kello 9.30 jokaisen kuukauden 15. päivänä. |
0 18 L * ? | Se tarkoittaa, että työ suoritetaan klo 18.00 jokaisen kuukauden viimeisenä päivänä. |
0 18 L-3 * ? | Se tarkoittaa, että työ suoritetaan kello 18.00 jokaisen kuukauden kolmantena viimeisenä päivänä. |
30 10? *5L | Se tarkoittaa, että työ suoritetaan klo 10.30 jokaisen kuukauden viimeisenä torstaina. |
0 10? * 23 | Se tarkoittaa, että työ suoritetaan klo 10.00 joka kuukauden kolmantena maanantaina. |
0 0 10/5 * ? | Se tarkoittaa, että työ suoritetaan joka päivä kello 12 keskiyöllä viiden päivän ajan alkaen kuukauden 10. päivästä. |
0 11 11 11 11 ? | Se tarkoittaa, että työ suoritetaan joka 11. marraskuuta klo 11.11 |
0 15 10 ? * 6L 2002-2005 | Tuli joka kuukauden viimeisenä perjantaina klo 10.15 vuosina 2002, 2003, 2004 ja 2005. |
0 0 0? * MINUN #1 | Se tarkoittaa, että työ suoritetaan kuukauden ensimmäisenä maanantaina keskiyöllä. |
0 0 0 LW * * | Se tarkoittaa, että työ suoritetaan kuukauden viimeisenä arkipäivänä keskiyöllä. |
0 0/30 8-10 * * * | Se tarkoittaa, että työ suoritetaan joka päivä klo 8.00, 8.30, 9.00, 9.30, 10.00 ja 10.30. |
Erikoisasetus Cron-lausekkeissa
Yllä olevan erikoissymbolin lisäksi Cron-lauseke tukee myös joitain ennalta määritettyjä erikoisarvoja. Näitä arvoja voidaan käyttää kenttien sijasta.
Cron Expressionin käyttö Javassa
Java tarjoaa avoimen lähdekoodin työn ajoitusjärjestelmän, joka ajoittaa työn tietylle aikayksikölle. Voimme ladata Quartz-aikataulun viralliselta sivustolta.
ddl vs dml
Ohjelmoinnin kannalta työ on luokka, joka sisältää suoritettavan tehtävän. Mutta kysymys on, kuinka se ajoitetaan. Työn ajoittamista varten määritämme liipaisimen ja määritämme, milloin työ suoritetaan.
Jos haluamme ottaa käyttöön Quartz-aikataulun, voimme lisätä riippuvuuden seuraavasti:
org.quartz-scheduler quartz 2.2.1
Huomautus: Ennen kuin suoritat seuraavan Java-ohjelman, varmista, että olet lisännyt kvartsi-2.2.1.purkki tiedosto polussa, muuten saat virheilmoituksen.
Katsotaanpa cron-lausekkeen ja työn toteutusta Java-ohjelman kautta.
Vaihe 1: Luo Maven-projekti. Olemme luoneet nimellä CronEsimerkki .
Vaihe 2: Luo projektin sisällä kaksi pakettia com.javatpoint.app ja com.javatpoint.job . Ensimmäisessä paketissa määritämme pääluokan ja toisessa paketissa määritämme työt (tapauksessamme töiden lukumäärä on viisi).
Vaihe 3: Liitä pom.xml-tiedostoon seuraava riippuvuus. Se lataa automaattisesti projektiin tarvittavat JAR-tiedostot. Pom-tiedosto näyttää tältä:
4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1
Vaihe 4: Luo viisi työtä (com.javatpoint.job-paketissa), jotka haluat suorittaa. Meidän tapauksessamme olemme määrittäneet seuraavat viisi tehtävää.
Työ1.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
d varvastossu
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()); } }
Vaihe 5: Luo pääluokka nimellä MyApp.
OmaApp.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(); } } }
Kun olemme suorittaneet kaikki yllä olevat vaiheet, projektihakemisto näyttää tältä:
Vaihe 6: Suorita yllä oleva Java-ohjelma nähdäksesi tulos.
Huomaamme, että jokainen työ suoritetaan tietyllä aikavälillä.