[RESOLVIDO]Agendamento Quartz

6 respostas
fabricioempresa

Bom pessoal tenho que implementar algumas rotinas em meu sistema porém
não estou conseguindo “achar” a expressão correta.

Gostaria que a cada 15 dias as 10:35 da manha ele mandasse um relatório por email.

A parte do email já tenho implementado o que faltaria seria apenas o agendamento.

Desde já agradeço pela atenção.

6 Respostas

luciocamilo

Fabricio,

O agendamento do quartz será iniciado a partir do momento que vc inicie o servidor.
vou lhe enviar um exemplo que implementei, que faz uma atualização periódica.

public class ApplicationStartup implements ServletContextListener {

	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("THE APPLICATION STOPPED");
	}

	public void contextInitialized(ServletContextEvent arg0) {
	    System.out.println("THE APPLICATION STARTED");
        try{
        	Log.logMessage(Level.INFO, "Agendando execução do Job");
        	// Initiate a Schedule Factory
        	SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        	// Retrieve a scheduler from schedule factory
        	Scheduler scheduler = schedulerFactory.getScheduler();
   
        	// Initiate JobDetail with job name, job group, and executable job class
        	JobDetail jobDetail = new JobDetail("jobDetail-s1","jobDetailGroup-s1", QuartzBloqueio.class);
        	// Initiate SimpleTrigger with its name and group name
        	SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
        	// set its start up time
        	simpleTrigger.setStartTime(new Date());
        	// set the interval, how often the job should run (30 seconds here)
        	simpleTrigger.setRepeatInterval(30000);
        	// set the number of execution of this job, set to 10 times.
        	// simpleTrigger.setRepeatCount(100);
        	// It will run 10 time and exhaust.
        	// Using the variable below, it will indefinitely
        	simpleTrigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
        	// set the ending time of this job.
        	// We set it for 60 seconds from its startup time here
        	// Even if we set its repeat count to 10,
        	// this will stop its process after 6 repeats as it gets it endtime by then.
        	//simpleTrigger.setEndTime(new Date(ctime + 60000L));
        	// set priority of trigger. If not set, the default is 5
        	//simpleTrigger.setPriority(10);
        	// schedule a job with JobDetail and Trigger
        	scheduler.scheduleJob(jobDetail, simpleTrigger);
   
        	// start the scheduler
        	Log.logMessage(Level.INFO, "Inicia o agendamento");
        	scheduler.start();
           
        }catch (SchedulerException se) {
        	Log.logMessage(Level.SEVERE, "Erro no agendamento do Job", se);
        	//NotificacaoEmail.enviaEmail(se.getMessage());
        }catch (Exception e) {
        	Log.logMessage(Level.SEVERE, "Erro não tratado do agendador de Jobs", e);
        	//NotificacaoEmail.enviaEmail(e.getMessage());
        }
		
	}
}
fabricioempresa

Bom pelo que eu entendi quando eu iniciar o servidor (independente do horario) ele vai repetir dentro do intervalo definido é isso?

O que eu precisa era colocar o horario de operacao do evento

Valeu.Obrigado pela ajuda

luciocamilo

Exatamente.
Para fazer em um horário específico não saberia lhe informar.

fabricioempresa

Quando eu resolver ai eu posto aqui xD

fabricioempresa

Alguem tem alguma dica?

fabricioempresa

Bom pessoal nada melhor do que dar uma boa olhada no site da biblioteca

Segue a solução.

/* 
 * Note that this will create a trigger that starts immediately.
 * To control the start time, use trigger.setStartTime(Date)
 */
SimpleTrigger trigger = new SimpleTrigger("trigger1", "group1");
trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
// 24 hours * 60(minutes per hour) * 60(seconds per minute) * 1000(milliseconds per second)
trigger.setRepeatInterval(2L * 24L * 60L * 60L * 1000L);
- OR -
/* 
 * Note that this will create a trigger that starts immediately.
 * To control the start time, use trigger.setStartTime(Date)
 */
DateIntervalTrigger trigger = new DateIntervalTrigger("trigger1", "group1", DateIntervalTrigger.IntervalUnit.DAY, 15);

Obrigado

Criado 16 de setembro de 2010
Ultima resposta 17 de set. de 2010
Respostas 6
Participantes 2