Home > JAVA > Criando uma tarefa Agendada no Java com Quartz

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!

About these ads
CategoriasJAVA Tags:, , , ,
  1. sdgdsgdsg
    janeiro 2, 2013 às 3:12 pm | #1

    Não funciona gênio!!!

  2. Humberto R. Souza
    janeiro 10, 2013 às 10:51 am | #2

    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.

  3. raphael
    fevereiro 28, 2013 às 5:11 pm | #3

    Funcionou perfeitamente

  1. Nenhum trackbacks ainda.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

Você está comentando usando sua conta WordPress.com. Sair / Mudar )

Imagem do Twitter

Você está comentando usando sua conta Twitter. Sair / Mudar )

Foto do Facebook

Você está comentando usando sua conta Facebook. Sair / Mudar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 127 outros seguidores

%d bloggers like this: