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:
import java.util.Date;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
public class PlanificadorQuartz {
public PlanificadorQuartz()throws Exception{
//Obtenemos una instancia de un objeto planificador
SchedulerFactory sf=new StdSchedulerFactory();
Scheduler sched=sf.getScheduler();
//La clase JobDetail es una clase que representa la tarea que queremos ejecutar y que posteriormente se //pasa al planificador
JobDetail jd1=new JobDetail(“j1″,”g1”,Tarea1Quartz.class);
SimpleTrigger st1=new SimpleTrigger(“st1″,”g2” ,new Date(),
null,SimpleTrigger.REPEAT_INDEFINITELY,1000L);
JobDetail jd2=new JobDetail(“j2″,”g1”,Tarea2Quartz.class);
CronTrigger ct1=new CronTrigger(“ct1″,”g2” ,“0/5 * * * * ?”);
//Añadimos cada tarea con su trigger al planificador
sched.scheduleJob(jd1, st1);
sched.scheduleJob(jd2, ct1);
//arrancamos el planificador
sched.start();
}
public static void main(String args[]){
try{
new PlanificadorQuartz();
}catch(Exception e){}
}
}
———————————————————————————————————————————
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
public class Tarea1Quartz implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException{
System.out.println(“Tarea1 planificada con SimpleTrigger “ + new Date());
}
}
———————————————————————————————————————————
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
public class Tarea2Quartz implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException{
System.out.println(“Tarea2 planificada con CronTrigger: “ + new Date());
}
}

Commentarios