logo

Expressió Java Cron

La tecnologia canvia constantment dia a dia. De vegades, hem d'executar un treball periòdicament al servidor. Executar el treball al servidor manualment és una tasca difícil, de manera que l'usuari o l'administrador no pot fer-ho diverses vegades. Per resoldre aquest problema, Cron ajuda el programador a executar un treball periòdicament al servidor. S'utilitza àmpliament per al manteniment i admiració del sistema automatitzat. A més d'això, també podem utilitzar Expressió cron en desenvolupament web. Hi ha moltes situacions en què una aplicació web pot necessitar executar una tasca determinada periòdicament.

En aquesta secció, parlarem de Expressions Java Cron , està funcionant i implementant Programador Java Quartz .

Què és Cron?

Bàsicament, Cron és una utilitat que programa una tasca. Permet a l'usuari programar una tasca periòdicament a l'hora, data, mes, dèbil i any especificats. S'utilitza àmpliament en processos automatitzats on no es requereix la intervenció humana.

Expressió Java Cron

Expressió Cron

A Java, les expressions Cron s'utilitzen per configurar instàncies del fitxer CronTrigger classe. És una subclasse de org.quartz.Trigger classe. Una expressió Cron és una cadena o expressió que consta de sis o set camps (unitat de temps). Descriu detalls individuals de la programació i l'ordre.

 

Una expressió cron pot ser simple i complexa. Per exemple,

Simple: * * * * ? * (L'asterisc indica camps)

Complex: 0 0/4 12,15,3-35,52 ? Maig, juny, juliol MAR-DS 2002-2010.

A més, tingueu en compte que una expressió Cron es pot escriure en diferents estils, de la següent manera. Per exemple, les tres expressions Cron següents tenen el mateix significat.

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

Les tres expressions s'executen cada dia a les 9:10.

Camps utilitzats en l'expressió Cron

En les expressions de Cron, es coneix com a unitat de temps camp . Aquests estan separats per espais en blanc, poden contenir qualsevol dels valors permesos amb diverses combinacions dels caràcters permesos per a aquest camp. Mostra els camps en l'ordre esperat. La taula següent mostra la unitat de temps i els valors corresponents i els símbols que es poden utilitzar amb les expressions.

Nom del camp Obligatori Valors permesos Caràcters especials permesos i símbols amb camps
Segons 0-59 , - * /
Minuts 0-59 , - * /
Hores 0-23 , - * /
Dia del mes -31 , - * ? / L W C
Mes 0-11 o GENER-DES , - * /
Dia de la setmana 1-7 o DUN-DS , - * ? / L C #
Curs Opcional buit o 1970-2099 , - * /

Símbols i lletres especials utilitzats en l'expressió Cron

Asterisc (*): El símbol s'utilitza quan volem executar un esdeveniment a cada unitat de temps (minut, segon, hora). Per exemple, si s'utilitza * amb unitat de temps de minut, vol dir que un esdeveniment s'executarà a cada minut, automàticament.

Signe d'interrogació (?): El símbol s'utilitza en camps com el dia del mes i el dia de la setmana. Indica el valor arbitrari i ignora el valor dels camps. Suposem que volem executar un script el 2 de cada mes sense importar-nos quin dia de la setmana cau el 2n dia del mes. En aquest cas, hauríem d'especificar un símbol de signe d'interrogació ( ?) al camp del dia de la setmana.

Guió (-): El símbol s'utilitza per especificar l'interval. Determina el rang de valors. Per exemple, si un camp d'hora es defineix com , significa que un esdeveniment s'executarà a la 4a i 5a hora.

convertir una cadena a data

Coma (,): S'utilitza per definir valors dels camps separats per comes. Per exemple, divendres, ds, dg, etc.

Barra inclinada (/): S'utilitza per incrementar els valors de la unitat de temps especificada. Suposem que volem iniciar un esdeveniment als 10 minuts, després d'això hem d'executar el mateix esdeveniment als 20 minuts, la següent execució als 30 minuts, i així successivament. En aquest cas, especifiquem l'hora d'inici i el valor incremental, separats per una barra inclinada.

Per exemple, si 10/10 especificat al camp de minuts, significa que el primer esdeveniment s'executa als 10 minuts, i la següent execució serà als 20 minuts d'una hora, i així no.

L (últim): L'ús de L té un significat diferent amb diversos camps.

  • Si s'ha utilitzat en el camp, indica l'últim dia del mes, segons el calendari.
  • Si s'ha utilitzat amb un valor de compensació com L-5 . Denota el 5thfins a l'últim dia del mes natural.
  • Si s'ha utilitzat en el camp, indica l'últim dia de la setmana. També es pot utilitzar amb un altre valor del camp. Per exemple, 7L denota la dissabte passat .

EN: Aquesta última representa els dies laborables (de dilluns a divendres). Determina el dia laborable més proper al dia especificat del mes.

Per exemple, si ho especifiquem 5W al camp del dia del mes, vol dir que w determineu el dia de la setmana proper al 5thdel mes.

  • Si el 5thdel mes és dissabte , s'activarà un esdeveniment 9th del mes.
  • Si el 5thdel mes és diumenge , s'activarà un esdeveniment 11th del mes.

Pot haver-hi un altre cas. Suposem , 1stdel mes és dissabte, un esdeveniment tindrà lloc el 3rddel mes. Significa que l'esdeveniment o l'script no s'executarà el mes anterior.

Hash (#): Representa l'enèsima aparició d'un dia feiner del mes. Per exemple, el tercer divendres de mes es pot indicar com 6#3 .

Per què hauríem d'utilitzar expressions cron?

Hi ha diverses raons per utilitzar expressions cron. Alguns d'ells són:

  • Podem caducar i esborrar els fitxers de dades a la memòria cau a un interval determinat.
  • Podem programar notícies diàries i correus electrònics.
  • Podem programar tasques de llarga durada perquè s'executin des d'un script de línia d'ordres, en lloc d'executar-lo des d'un script web. Com ara codificar vídeos o enviar correus electrònics massius.

Exemple d'expressions Cron

Vegem algunes expressions de Cron comunes que utilitzen camps i símbols especials.

Expressió Cron Significat de les expressions Cron
0 12 * * ? Indica que un treball s'executarà a les 12:00 (migdia) cada dia.
0/5 13,18 * * ? Indica que un treball s'executa cada cinc minuts a partir de les 13:00 i finalitza a les 13:55 i després a les 18:00 i finalitza a les 18:55, cada dia.
0-5 13 * * ? Indica que un treball s'executa cada minut a partir de les 13:00 i finalitza a les 13:05, cada dia.
15,45 13 ? 6 dimarts Indica que un treball s'executarà a les 13:15 i a les 13:45 tots els dimarts del mes de juny.
30 9? * DILLUNS-DIV Indica que un treball s'executarà a les 9:30 del matí tots els dilluns, dimarts, dimecres, dijous i divendres.
30 9 15 * ? Indica que un treball s'executarà a les 9:30 del matí del dia 15 de cada mes.
0 18 L * ? Indica que un treball s'executarà a les 6 de la tarda de l'últim dia de cada mes.
0 18 L-3 * ? Indica que un treball s'executarà a les 6 de la tarda del tercer a l'últim dia de cada mes.
30 10 ? *5L Indica que un treball s'executarà a les 10:30 de l'últim dijous de cada mes.
0 10 ? * 2#3 Indica que un treball s'executarà a les 10 del matí del tercer dilluns de cada mes.
0 0 10/5 * ? Indica que un treball s'executarà a les 12 de la nit cada dia durant cinc dies a partir del dia 10 del mes.
0 11 11 11 11 ? Indica que un treball s'executarà cada 11 de novembre a les 11:11 del matí
0 15 10 ? * 6L 2002-2005 Foc a les 10:15 cada darrer divendres de cada mes durant els anys 2002, 2003, 2004 i 2005.
0 0 0 ? * EL MEU #1 Indica que un treball s'executarà el primer dilluns de mes a mitjanit.
0 0 0 LW * * Indica que un treball s'executarà l'últim dia feiner del mes a la mitjanit.
0 0/30 8-10 * * * Indica que un treball s'executarà a les 8:00, 8:30, 9:00, 9:30, 10:00 i 10:30 cada dia.

Configuració especial a les expressions Cron

A més del símbol especial anterior, l'expressió Cron també admet alguns valors especials predefinits. Aquests valors es poden utilitzar en lloc dels camps.

    @anual o @anualment:Fa una feina un cop l'any. Per exemple, '0 0 0 1 1 *' .@mensual: fa feina un cop al mes. Per exemple, '0 0 0 1 * *'. @setmanal: Funciona un cop a la setmana. Per exemple, '0 0 0 * * 0'. @diari o @mitjanit:Funciona un cop al dia. Per exemple, '0 0 0 * * *'. @hora: S'executa la feina cada hora. Per exemple, '0 0 * * * *'.

Utilitzant l'expressió Cron a Java

Java proporciona un sistema de programació de treballs de codi obert que programa un treball per a una unitat de temps específica. Podem descarregar Quartz scheduler des del lloc oficial.

instal·lació de maven

Pel que fa a la programació, el treball és una classe que conté la tasca a executar. Però la qüestió és com programar-ho. Per programar un treball, definim un activador i especifiquem quan s'executarà el treball.

Si volem implementar el planificador Quartz, podem afegir la dependència, de la següent manera:

 org.quartz-scheduler quartz 2.2.1 

Nota: abans d'executar el programa Java següent, assegureu-vos que heu afegit quars-2.2.1.jar fitxer al camí, sinó obtindreu un error.

Vegem la implementació de l'expressió cron i el treball mitjançant un programa Java.

Pas 1: Creeu un projecte Maven. Hem creat amb el nom CronExample .

Pas 2: Dins del projecte, creeu dos paquets, a saber com.javatpoint.app i com.javatpoint.job . En el primer paquet, definirem la classe principal i en el segon paquet definirem els llocs de treball (en el nostre cas el nombre de llocs de treball és de cinc).

Pas 3: Al fitxer pom.xml, enganxeu la dependència següent. Descarrega automàticament els fitxers JAR necessaris per al projecte. El fitxer pom té l'aspecte següent:

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

Pas 4: Creeu cinc treballs (al paquet com.javatpoint.job) que voleu executar. En el nostre cas, hem definit els cinc llocs de treball següents.

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

alfabet als números
 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()); } } 

Pas 5: Creeu la classe principal amb el nom 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(); } } } 

Quan acabem amb tots els passos anteriors, el directori del projecte sembla el següent:

Expressió Java Cron

Pas 6: Executeu el programa Java anterior per veure la sortida.

Expressió Java Cron

Observem que cada treball s'executa en un interval de temps específic.