No primeiro post, deu um pequeno exemplo de temporizador que roda em tempos em tempos, digo segundos em segundos. Mas se eu quero agendar que o meu sistema lança um job, em um determinado hora de cada dia do mês? É possível?
Sim, não muda quase nada, o que precisamos é do CronTrigger, e dos parametros de que controla do time. Seja abaixo os parametros que VOCÊ deve saber:
| Expressão | Significado |
|---|---|
| “0 0 12 * * ?” | Dispara do meio dia de cada dia |
| “0 15 10 ? * *” | Dispara 10:15 da manhã de cada dia |
| “0 15 10 * * ?” | Dispara 10:15 da manhã de cada dia |
| “0 15 10 * * ? *” | Dispara 10:15 da manhã de cada dia |
| “0 15 10 * * ? 2005” | Dispara 10:15 da manhã de cada dia durante ano de 2005 |
| “0 * 14 * * ?” | Dispara a cada minuto a partir das 02:00 e terminando às 2:59 pm, todos os dias |
| “0 0/5 14 * * ?” | Dispara a cada 5 minuto a partir das 02:00 e terminando às 2:55 pm, todos os dias |
| “0 0/5 14,18 * * ?” | Dispara a cada 5 minutos a partir de duas horas e terminando às 2:55 pm, e disparar a cada 5 minutos a partir de 18:00 e terminando às 6:55 pm, todos os dias |
| “0 0-5 14 * * ?” | Dispara a cada minuto a partir das 02:00 e terminando às 2:05 pm, todos os dias |
| “0 10,44 14 ? 3 WED” | Dispara em 2:10 da tarde até 02:44 da tarde,isso toda quarta-feira no mês de março |
| “0 15 10 ? * MON-FRI” | Dispara às 10:15 de toda segunda-feira, terça, quarta, quinta e sexta-feira |
| “0 15 10 15 * ?” | Dispara às 10:15 horas do dia 15 de cada mês |
| “0 15 10 L * ?” | Dispara às 10:15 no último dia de cada mês |
| “0 15 10 ? * 6L” | Dispara às 10:15 na última sexta-feira de cada mês |
| “0 15 10 ? * 6L 2002-2005” | Dispara às 10:15 em cada última sexta-feira de cada mês durante os anos 2002, 2003, 2004 e 2005 |
| “0 15 10 ? * 6#3” | às 10:15 na terceira sexta-feira de cada mês |
Neste post não irei tratar como instalar o framework Quartz,isso pode ser visto no post anterior.O códigos abaixo é referente a parte1, aproveitando a idéia do serviço, mas mostrando um jeito diferente de disparo do serviço.
package br.com.chikasawa.teste;
import org.apache.commons.mail.SimpleEmail;
public class EnviarEmail {
public static void main(String[] args)
{
SimpleEmail email = new SimpleEmail();
try {
email.setDebug(true);
email.setHostName("smtp.gmail.com");
email.setAuthentication("seu_login", "sua_senha");
email.setSSL(true);
email.addTo("email_destinatario@gmail.com");
email.setFrom("seu_email@gmail.com");
email.setSubject("Testando");
email.send();
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
}
}
Essa Classe, cria-se um Job.
package br.com.chikasawa.teste;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class EmailJob implements Job {
public EmailJob() {
}
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
EnviarEmail teste = new EnviarEmail();
teste.main(null);
}
}
Criei um job que despara todos os dias 31 de cada mês no horário 9:32 da manhã.
package br.com.chikasawa.teste;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.JobBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
public class ExecTarefa {
public static void main(String[] args) throws SchedulerException
{
JobDetail job = newJob(EmailJob.class)
.withIdentity("myJob", "myGroup")
.storeDurably()
.requestRecovery()
.usingJobData("someKey", "someValue")
.build();
CronTrigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(cronSchedule("0 32 9 31 * ?"))
.build();
Scheduler sched = new StdSchedulerFactory().getScheduler();
// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);
sched.start();
}
}
Procurei mostra neste post, um forma diferente em agendar suas tarefas, serviços.
Mais informações, nada melhor que o site do framework.


