Criando uma tarefa Agendada no Java com Quartz
Eventualmente temos a necessidade de ter um aplicativo Java que irá rodar seguindo uma determinada agenda, por exemplo, de 10 em 10 minutos, todos dia as 18 horas, etc…
Quartz é um componente que nos permite fazer isso com facilidade. Para criar uma aplicação simples, basta baixar o mesmo de quartz-scheduler.org , e criar uma aplicação com as libs do quartz no classpath da mesma, e ter pelo menos duas classes, uma que representa a TAREFA, e outra que representa a AGENDA. Seguem os exemplos:
- Tarefa
package com.br.infoserver.quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/**
* Esta classe demonstra uma tarefa que ira ser invocada pelo Quartz
* Tem que implementar a interface Job do Quartz
* @author julianom
*
*/
public class TarefaExemplo implements Job{
/**
* Metodo que é executado quando a tarefa é invocada
*/
public void execute(JobExecutionContext context)
throws JobExecutionException {
// Obviamente, aqui vai a lógica da tarefa a ser chamada, nesta caso, vai imprimir no console
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy – hh:mm:ss");
System.out.println("Rodou: " + dateFormat.format( new Date() ));
}
}
- Agenda
package com.br.infoserver.quartz;
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;
/**
* Esta é a classe que deve ser invocada e irá disparar a tarefa nos momentos
* determinados
*
* @author julianom
*
*/
public class Agendador {
public static void inicia() throws Exception {
// Detalhes da tarefa
JobDetail job = JobBuilder.newJob(TarefaExemplo.class).withIdentity(
"tarefaAloMundo", "group1").build();
// Gatilho - ou seja, quando irá chamar, neste caso, a cada 5 segundos
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(
"gatilhoAloMundo", "group1").withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
// Agenda e voa lá!
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
Finalmente, a classe principal que invoca a agenda:
package com.br.infoserver.quartz;
/**
* Classe principal da aplicação que dispara as agendas
* @author julianom
*
*/
public class IniciaAgenda {
public static void main(String[] args) {
try {
Agendador.inicia();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Enjoy!

Não funciona gênio!!!
Funcionou corretamente. Parabéns!
Apenas alterei o nome das classes para uso no meu exemplo. O importante é bater tudo: nome da classe -> chamada do Job, etc.
Funcionou perfeitamente