Início > 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!

Categorias:JAVA Tags:, , , ,
  1. sdgdsgdsg
    janeiro 2, 2013 às 3:12 pm

    Não funciona gênio!!!

    • outubro 31, 2013 às 8:15 am

      Típico comentário de sujeito sem educação e sem cérebro…

      O exemplo funciona perfeitamente, sim.
      Obrigado pela iniciativa Juliano!

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

    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

    Funcionou perfeitamente

  4. outubro 31, 2013 às 4:32 pm

    Obrigado, Funcionou perfeitamente.

    OBs.: Vale mencionar que devem esta todas as libs que fazem parte do projeto quartz.

  5. Francisco
    outubro 29, 2014 às 5:04 pm

    Perdoem a minha ignorância, mas sou novato em java. Entendi como o código trabalha, mas não entendi como adicionar o Quartz ao projeto. “Criar uma aplicação com as libs do quartz no classpath da mesma”, alguém pode traduzir isso pro “calourês”?

  6. Sanches
    fevereiro 3, 2016 às 9:01 pm

    Funcionou sim.
    Muito obrigado pela ajuda!

  7. Alex Sacramento
    dezembro 7, 2016 às 10:40 am

    Aos que usaram e funcionou, eu criei uma user libraries e não copiei as lib direto ao diretório , alguém fez e funcionou ? Ou todos copiaram as libs para o diretorio ? E qual versão do quartz vcs usaram ? Estou usando 2.2.3….helppppp

  1. No trackbacks yet.

Deixe uma resposta

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

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: