Agendamento de atividades com Quartz 2.1.2

O Quartz 2.1.2 nada mais é que um Framework utilizado para fazer qualquer tipo de agendamento, ele pode ser utilizado para agendar atividades desde os mais simples como mandar um alerta de um em um minuto, até os mais complexos como mandar um e-mail em uma certa hora, minuto, segundo, dia, dia da semana ou ano. O Quartz 2.1.2 é uma ferramenta completa, e vale a pena dar uma olhada neste artigo. Boa Leitura.

Para começar a trabalhar com o Quartz 2.1.2 é necessário fazer o Download da sua biblioteca no site da Quartz, entre no site e faça o download do Quartz 2.1.2, é importante lembrar na Quartz 2.1.2 está bem diferente das versões anteriores, muita coisa foi retirada e muita coisa nova foi acrescentada, então faça exatamente o download da versão 2.12. Feito o download descompacte o arquivo em uma pasta dentro do seu sistema. Agora crie um novo Java Project: clicando com o botão direito → New → Java Project, feito isso crie um Folder, e nomeie de lib: clique no projeto →botão direito → New → Folder, agora basta copiar os arquivos quartz2.2.1.jar, que está na pasta raiz do arquivo que foi baixado do site da Quartz, c3p0-0.9.1.1.jar, log4j-1.2.16.jar, slf4j-api-1.6.1.jar e slf4j-log4j12-1.6.1,  que estão dentro da pasta lib  do arquivo baixado, dentro do folder lib, agora sim vamos inserir a biblioteca no Java Build Path, para isso faça: clique no projeto → botão direito → Properties → Java Buil Path → Libraries → Add JARs… → Clique no seu projeto → lib → e adicione todos os .jar que estão dentro do Folder lib  que criamos dentro do Java Project. Pronto, basta clicar em Ok para finalizar.

Agora vamos criar um Package e uma Classe que será responsável por armazenar o trabalho que será repetido ou seja agendada, faça os imports necessários e lembre de implementar o Job na sua Classe. No exemplo abaixo, fiz uma classe que imprime a hora atual do sistema, no caso usei o Gregorian Calendar. É nesta Classe que você irá colocar as informações que serão feitas nos agendamento, é nela que você pode colocar um código que manda e-mails, ou faz o backup de algo.

package pedro.job.sistema;
import java.util.GregorianCalendar;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class Hora implements Job{

     @Override
     public void execute(JobExecutionContext arg0) throws JobExecutionException {

          StringBuilder stringBuilder = new StringBuilder();
          GregorianCalendar greg = new GregorianCalendar();

          stringBuilder.append(greg.get(GregorianCalendar.HOUR_OF_DAY));
          stringBuilder.append(":");
          stringBuilder.append(greg.get(GregorianCalendar.MINUTE));
          stringBuilder.append(":");
          stringBuilder.append(greg.get(GregorianCalendar.SECOND));

          String horaAtual = stringBuilder.toString();
          System.out.println(horaAtual);
         }
   }

Antes de dar continuidade é importante entender como funciona a expressão cron do CronScheduleBuiler, veja está linha é nela que vamos especificar tudo referente ao agendamento, horas dias etc:

CronScheduleBuilder.cronSchedule("0 0 0-23 * * ?");

Os campos que contem o: 0 0 0-23 * * ?  representam respectivamente: Segundos, Minutos, Horas, Dias do Mês, Mês, Dia da Semana e Ano, o * representa todos, ou seja todos os dias do mês e todos os meses, o 0-23 significa que ele fará isso no intervalo de tempo das zero horas às 23 horas, e o ? significa que não tem um valor específico. Para entender mais dessas expressões acesse este Link da própria Quartz.

Dando continuidade, crie uma nova Classe e cole o código a seguir, não se esqueça dos imports. 

package hora.sistema;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.ScheduleBuilder;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class Tarefa {
 /**
 * @param args the command line arguments
 * @throws SchedulerException
 */
      public static void main(String[] args) throws SchedulerException{

           Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
           scheduler.start();

           JobDetail job = JobBuilder.newJob(Hora.class).withIdentity("QuickQuartzJob").build();

           ScheduleBuilder<?> scheduleBuilder = CronScheduleBuilder.cronSchedule("0 0 0-23 * * ?");

           Trigger trigger = TriggerBuilder.newTrigger().withIdentity("QuickQuartzTrigger").withSchedule(scheduleBuilder).startNow().build();
           scheduler.scheduleJob(job, trigger);
       }
   }

Importante, é na linha que vamos “chamar” a Classe que tem a rotina de armazenamento, veja que chamei a Classe Hora.class:

  JobDetail job = JobBuilder.newJob(Hora.class).withIdentity("QuickQuartzJob").build(); 

Bom, é isso, qualquer dúvida, sugestão será bem vinda!

Em breve mais posts, aguarde!

Anúncios

2 comentários

  1. norberto · março 29, 2014

    Pedro, neste caso como faço uma tarefa agendada que conecta no mysql seleciona todas as tabelas e inseri em um banco oracle com a mesma estrutura. È que tem uma empresa que fornece combustivel e precisamos extrair dados todo fim de semana

Deixe um comentário

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