Saltar al contenido

www. La Mandarina Mecánica .es

…ahora con internet los niños se te educan solos… Homer Simpson…

Archivo

Categoría: QUARTZ

Quartz es un framework el cual nos permite planificar tareas en Java de una forma muy sencilla, es muy potente ya que, por configuración, nos permite establecer una gran cantidad de parámetros a la hora de planificar una tarea como por ejemplo:

 

- Una tarea que se ejecute indefinidamente con un intervalo de tiempo T entre ejecuciones.

- Una tarea que se ejecute N veces con un intermedio entre tareas T

- Una tareas se ejecute todos los dias a una hora determinada.

- Una tarea que se ejecute semanalmente, mensualmente…

 

Para ello Quartz se basa en tres conceptos:

 

-       Scheduler: Quien se va a encargar de ejecutar las tareas según la forma en que se hayan programado. 

-       Job: La tarea que se va a ejecutar. 

-       Trigger: Indica la forma como se tiene que ejecutar esa tarea (hora inicio, hora fin, periodicidad…). Los trigger pueden ser de dos tipos:

 

o    SimpleTrigger: Nos permite especificar: 

- La hora a la que se va a lanzar la tarea.

- La hora a la que se va a dejar de ejecutar la tarea.

- Cuantas veces se va a ejecutar la tarea (Puede ser indefinidamente).

- Intervalo entre las ejecuciones de la tarea.

 

o    CronTrigger: Nos permite planificar la ejecución de tareas basandonos en fechas (cada día, cada semana…), Nos permite especificar: 

- Segundo.

- Minuto.

- Hora.

- Dia del mes.

- Mes.

- Dia de la semana.

 

Descarga: 

Los links de descarga son estos: 

http://www.quartz-scheduler.org/download/index.html

 

Instalación:

 

Para poder utilizar Quartz hay que añadir al classPath de nuestra aplicación las librerias de Quartz. Para el ejemplo se han utilizado estas librerias: 

- quartz-1.6.6.jar

- commons-logging-api-1.1.jar

En el siguiente ejemplo se planificarán dos tareas, una de ellas utilizando un SimpleTrigger y la otra utilizando un CronTrigger.

Para ello se utilizan tres clases:

   - PlanificadorQuartz.java (Aquí se configura el planificador)
   - Tarea1Quartz.java (tarea a ejecutar planificada con el SimpleTrigger)
   - Tarea2Quartz.java (tarea a ejecutar planificada con el CronTrigger)

A continuación vamos a ver la forma de instanciar las tareas y los trigger que es la unica parte del ejemplo que es un poco más compleja:

Instanciación de los Trigger:
 
 SimpleTrigger:
  
Los objetos SimpleTrigger son instancias de la clase java.org.quartz.SimpleTrigger, sus argumentos son:

- name: Nombre del Trigger.
- group: Grupo al que pertenece el Trigger.
- startTime:  Hora a la que se comienza a ejecutar el Trigger.
- endTime: Hora a la que se deja de ejecutar el Trigger.
- repeatCount: Número de veces que se la tarea, para que se ejecute  indefinidamente se utiliza REPEAT_INDEFINITELY.
- repeatInterval: Tiempo en milisegundos entre cada ejecución de la tarea programada.
 
SimpleTrigger st1=new SimpleTrigger(name, group, startTime, endTime, repeatCount, repeatInterval);
 
Ejemplo1: Un trigger que se lanza una sola vez pasados 10 segundos desde la hora actual.

name = “st1”
group = “g1”
startTime = System.currentTimeMillis() + (10L*1000L)
endTime = null
repeatCount = 0
repeatInterval = 0L

Ejemplo2: Un trigger que se lanza el 20 de Marzo del 2010 a las 9:00 a.m. que se repite 5 veces con un tiempo entre cada ejecucion de 10 seg

Para ello primero hay que obtener en milisegundos esa fecha:

java.util.Calendar cal = new java.util.GregorianCalendar(2007,cal.MARCH, 20);
cal.set(cal.HOUR, 9);
cal.set(cal.MINUTE, 00);
cal.set(cal.SECOND, 0);
cal.set(cal.MILLISECOND, 0);

Data start = cal.getTime();
 
name = “st1”
group = “g1”
startTime = start
endTime = null
repeatCount = 5
repeatInterval = 20L*1000L

 CronTrigger:

Los objetos CronTrigger son instancias de la clase java.org.quartz.CronTrigger, sus argumentos son:

- name: Nombre del Trigger.
- group: Grupo al que pertenece el Trigger.
- Cron-expression: Como hemos visto antes los CronTrigger nos permiten realizar planificaciones basandonos en fechas, para realizar esta planificación hay que utilizar unas exprexiones que definan segundo, minuto, hora, dia mes, mes y dia semana, de una forma entendible por el planificador, esta es la forma:

La Cron-Expresion es un String con este formato:

“segundo  minuto  hora  diaMes  mes  diaSemana”

Donde:
  segundo = valor entre 0 y 59
  minuto = valor entre 0 y 59
  hora = valor entre 0 y 23
  diaMes = valor entre 0 y 31
  mes = valor entre 0 y 11
  diaSemana = valor entre 1 y 7

Caracteres especiales:
  
/ = Indica un incremento, por ejemplo en el campo minuto si se pone 0/1 indica que se lanzará cada minuto
* = Indica que se seleccionan todos los posibles valores, si se usa en el campo mes, se ejecutaria todos los meses, si se usa en el campo diaSemana se ejecutará todos los dias.
L = En el caso de diaMes o diaSemana indica el último día del mes seleccionado o el ultimo día de la semana
? = En el caso de diaMes o diaSemana indica que no se ha seleccionado ningún valor en especial
CronTrigger ct1=new CronTrigger(”name”,”group”,”cron-expression”);

Ejemplo1: Trigger que se lanza cada 5 segundos indefinidamente

 ”0/5 * * * * ?”

Ejemplo2: Trigger que se lanza cada 30 min desde las 9 hasta las 13, es decir
       A las 9:30, 10:30, 11:30, 12:30 y 13:30
 
  ”0  30  9-13  *  *  ?”

Bueno, una vez comentada toda esta parte teórica vamos con el ejemplo:

continúe leyendo…