La tecnología cambia constantemente día a día. A veces, se nos pide que ejecutemos un trabajo periódicamente en el servidor. Ejecutar el trabajo en el servidor manualmente es una tarea difícil, por lo que el usuario o el administrador no puede realizarla varias veces. Para resolver este problema, cron Ayuda al programador a ejecutar un trabajo periódicamente en el servidor. Es ampliamente utilizado para el mantenimiento y la admiración de sistemas automatizados. Además de esto, también podemos usar expresión cron en desarrollo web. Hay muchas situaciones en las que una aplicación web puede necesitar ejecutar una determinada tarea periódicamente.
En esta sección, discutiremos la Expresiones cron de Java , está funcionando e implementándose a través de Programador de cuarzo Java .
¿Qué es Cron?
Básicamente, Cron es una utilidad que programa una tarea. Permite al usuario programar una tarea periódicamente en una hora, fecha, mes, punto débil y año específicos. Se utiliza ampliamente en procesos automatizados donde no se requiere intervención humana.
Expresión cron
En Java, las expresiones Cron se utilizan para configurar instancias del CronTrigger clase. Es una subclase de org.quartz.Trigger clase. Una expresión Cron es una cadena o expresión que consta de seis o siete campos (unidad de tiempo). Describe detalles individuales del programa y del comando.
Una expresión cron puede ser tanto simple como compleja. Por ejemplo,
Simple: * * * * ? * (el asterisco indica campos)
al hacer clic en javascript
Complejo: 0 0/4 12,15,3-35,52 ? Mayo, junio, julio MAR-SÁB 2002-2010.
Además, tenga en cuenta que una expresión Cron se puede escribir en diferentes estilos, como se muestra a continuación. Por ejemplo, las siguientes tres expresiones Cron tienen el mismo significado.
- 0 10 9 ? * *
- 0 10 9 * * ?
- 0 10 9 * * ? *
Las tres expresiones se ejecutan a las 9:10 a. m. todos los días.
Campos utilizados en la expresión cron
En las expresiones Cron, la unidad de tiempo se conoce como campo . Estos están separados por espacios en blanco y pueden contener cualquiera de los valores permitidos con varias combinaciones de caracteres permitidos para ese campo. Muestra los campos en el orden esperado. La siguiente tabla muestra la unidad de tiempo, los valores correspondientes y los símbolos que se pueden utilizar con las expresiones.
Nombre del campo | Requerido | Valores permitidos | Caracteres especiales y símbolos permitidos con campos |
---|---|---|---|
Segundos | Sí | 0-59 | , - * / |
Minutos | Sí | 0-59 | , - * / |
Horas | Sí | 0-23 | , - * / |
Dia del mes | Sí | -31 | , - * ? / L W C |
Mes | Sí | 0-11 o ENE-DIC | , - * / |
Día de la semana | Sí | 1-7 o DOM-SAB | , - * ? /L C# |
Año | Opcional | vacío o 1970-2099 | , - * / |
Símbolos y letras especiales utilizados en la expresión cron
Asterisco (*): El símbolo se utiliza cuando queremos ejecutar un evento en cada unidad de tiempo (minuto, segundo, hora). Por ejemplo, si * se usa con unidad de tiempo de minutos, significa que un evento se ejecutará cada minuto de forma automática.
Signo de interrogación (?): El símbolo se utiliza en campos como día del mes y día de la semana. Denota el valor arbitrario e ignora el valor de los campos. Supongamos que queremos ejecutar un script el día 2 de cada mes sin preocuparnos de qué día de la semana cae en el segundo día del mes. En este caso, debemos especificar un símbolo de signo de interrogación ( ?) en el campo del día de la semana.
Guión (-): El símbolo se utiliza para especificar el rango. Determina el rango de valores. Por ejemplo, si un campo de hora se define como , significa que un evento se ejecutará a las 4 y 5 horas.
Coma (,): Se utiliza para definir valores de los campos separados por coma. Por ejemplo, viernes, sábado, domingo, etc.
Barra inclinada (/): Se utiliza para incrementar valores de la unidad de tiempo especificada. Supongamos que queremos iniciar un evento a los 10 minutos, luego debemos ejecutar el mismo evento a los 20 minutos, la siguiente ejecución a los 30 minutos, y así sucesivamente. En este caso, especificamos la hora de inicio y el valor incremental, separados por una barra diagonal.
Por ejemplo, si 10/10 Si se especifica en el campo de minutos, significa que el primer evento se ejecutará a los 10 minutos y la siguiente ejecución será a los 20 minutos de una hora, por lo que no.
L (Último): El uso de L tiene diferentes significados según los distintos campos.
- Si se ha utilizado en el campo, denota el último día del mes, según el calendario.
- Si se ha utilizado con un valor de compensación como L-5 . Denota el 5thhasta el último día del mes calendario.
- Si se ha utilizado en el campo, indica el último día de la semana. También se puede utilizar con otros valores en el campo. Por ejemplo, 7L denota el el sábado pasado .
EN: Este último representa los días laborables (de lunes a viernes). Determina el día de la semana más cercano al día especificado del mes.
Por ejemplo, si especificamos 5W en el campo del día del mes, significa que determinaremos el día de la semana cercano al 5thDel mes.
- si el 5thdel mes es Sábado , se activará un evento el 9th Del mes.
- si el 5thdel mes es Domingo , se activará un evento el 11th Del mes.
Puede existir otro caso. Suponer , 1calledel mes es sábado, un evento ocurrirá el 3terceroDel mes. Significa que el evento o script no se ejecutará en el mes anterior.
Hash (#): Representa la enésima aparición de un día laborable del mes. Por ejemplo, el tercer viernes del mes se puede indicar como 6#3 .
¿Por qué deberíamos utilizar expresiones cron?
Hay varias razones para utilizar expresiones cron. Algunos de ellos son:
- Podemos caducar y borrar archivos de datos almacenados en caché en un intervalo determinado.
- Podemos programar boletines de noticias diarios y correos electrónicos.
- Podemos programar tareas de larga duración para que se ejecuten desde un script de línea de comandos, en lugar de ejecutarlas desde un script web. Como codificar vídeos o enviar correos electrónicos masivos.
Ejemplo de expresiones cron
Veamos algunas expresiones Cron comunes que utilizan símbolos y campos especiales.
Expresión cron | Significado de las expresiones cron |
---|---|
0 12 * * ? | Indica que un trabajo se ejecutará a las 12:00 p. m. (mediodía) todos los días. |
0/5 13,18 * * ? | Indica que un trabajo se ejecutará cada cinco minutos comenzando a la 1:00 p. m. y terminando a la 1:55 p. m. y luego comenzando a las 6:00 p. m. y terminando a las 6:55 p. m., todos los días. |
0-5 13 * * ? | Indica que un trabajo se ejecutará cada minuto desde la 1:00 p. m. hasta la 1:05 p. m., todos los días. |
15,45 13 ? 6 mar | Indica que un trabajo se ejecutará a las 13:15 y a las 13:45 todos los martes del mes de junio. |
30 9? * LUNES-VIE | Indica que un trabajo se ejecutará a las 9:30 a. m. todos los lunes, martes, miércoles, jueves y viernes. |
30 9 15 * ? | Indica que un trabajo se ejecutará a las 9:30 a. m. del día 15 de cada mes. |
0 18 L * ? | Indica que un trabajo se ejecutará a las 6 p.m. del último día de cada mes. |
0 18 L-3 * ? | Indica que un trabajo se ejecutará a las 6 p. m. del antepenúltimo día de cada mes. |
30 10 ? *5L | Indica que un trabajo se ejecutará a las 10:30 a. m. del último jueves de cada mes. |
0 10 ? * 2#3 | Indica que un trabajo se ejecutará a las 10 a. m. del tercer lunes de cada mes. |
0 0 10/5 * ? | Indica que un trabajo se ejecutará a las 12 de la noche todos los días durante cinco días a partir del día 10 del mes. |
0 11 11 11 11 ? | Denota que un trabajo se ejecutará cada 11 de noviembre a las 11:11 a.m. |
0 15 10 ? *6L 2002-2005 | Incendio a las 10:15 a. m. el último viernes de cada mes durante los años 2002, 2003, 2004 y 2005. |
0 0 0 ? * MI#1 | Indica que un trabajo se ejecutará el primer lunes del mes a medianoche. |
0 0 0 LB * * | Indica que un trabajo se ejecutará el último día laborable del mes a medianoche. |
0 0/30 8-10 * * * | Indica que un trabajo se ejecutará a las 8:00, 8:30, 9:00, 9:30, 10:00 y 10:30 todos los días. |
Configuración especial en expresiones cron
Además del símbolo especial anterior, la expresión Cron también admite algunos valores especiales predefinidos. Estos valores se pueden utilizar en lugar de los campos.
Usando la expresión cron en Java
Java proporciona un sistema de programación de trabajos de código abierto que programa un trabajo para una unidad de tiempo específica. Podemos descargar el programador Quartz desde el sitio oficial.
quien es freddie mercury
En términos de programación, trabajo es una clase que contiene la tarea a ejecutar. Pero la pregunta es cómo programarlo. Para programar un trabajo, definimos un disparador y especificamos cuándo se ejecutará el trabajo.
Si queremos implementar el programador Quartz, podemos agregar la dependencia de la siguiente manera:
org.quartz-scheduler quartz 2.2.1
Nota: Antes de ejecutar el siguiente programa Java, asegúrese de haber agregado cuarzo-2.2.1.jar archivo en la ruta; de lo contrario, obtendrá un error.
Veamos la implementación de la expresión cron y el trabajo a través de un programa Java.
Paso 1: Crea un proyecto Maven. Hemos creado con el nombre. CronEjemplo .
Paso 2: Dentro del proyecto, cree dos paquetes, a saber com.javatpoint.app y com.javatpoint.job . En el primer paquete definiremos la clase principal y en el segundo paquete definiremos los trabajos (en nuestro caso el número de trabajos es cinco).
Paso 3: En el archivo pom.xml, pegue la siguiente dependencia. Descarga automáticamente los archivos JAR necesarios para el proyecto. El archivo pom se parece al siguiente:
4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1
Etapa 4: Cree cinco trabajos (en el paquete com.javatpoint.job) que desee ejecutar. En nuestro caso, hemos definido los siguientes cinco trabajos.
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()); } }
Paso 5: Crea la clase principal con el nombre 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(); } } }
Cuando hayamos terminado con todos los pasos anteriores, el directorio del proyecto se verá así:
Paso 6: Ejecute el programa Java anterior para ver el resultado.
Observamos que cada trabajo se ejecuta en un intervalo de tiempo específico.
declaración de impresión en java