Dúvida na criação de uma Quartz Trigger para executar uma vez por mês

8 respostas
_

Eae pesoal, blz?

Estou com uma dúvida sobre como criar uma Trigger para o Quartz que dispare a execução de um Job mensalmente.

Estou usando o método TriggerUtils.makeMonthlyTrigger(String trigName, int dayOfMonth, int hour, int minute). O problema é que se for configurado o dia 31 e o mês possuir 30 dias a trigger não será disparada. No mês de Fevereiro também teriamos problema, assim como em todos os outros meses que tem 30 dias.

Alguém sabe se é possível executar a Trigger após a data agendada, no caso da mesma não ter sido executada na data anterior?
Ex: Configuro a Trigger para executar no dia 31 às 13:00 horas. No mês de Março a mesma será executada sem problemas, porém, no mês seguinte, Abril, a mesma não será executada.

Se alguém tiver alguma dica eu agradeço.

[]'s

8 Respostas

R

Dá muita diferença se executar no ultimo dia do mes… ou no primeiro do mes seguinte?

_

Então, o problema é que o usuário é que vai configurar o dia. Caso ele escolha dias entre 29 e 31 aí os problemas poderiam ocorrer.

R

Usando cron triggers dá pra fazer (mas nao sei se nao tem jeito de fazer do jeito que vc tá fazendo tb, as vezes tem… outras pessoas podem falar)

http://www.ibm.com/developerworks/java/library/j-quartz/ Talvez ajude

R

Acho que a expressao vai ser algo mais ou menos assim (nao sei se tá certo… provavelmente nao esteja)

0 0 13 L 0/1 *

_

Blz, vou dar uma olhada.

Valeu!

[]'s

R

Humm… se o usuário vai escolher o dia… complica mais um pouco

J

Eu fiz aqui uma tarefa pra executar de hora em hora com spring e quartz ai dentro do método que executa eu preciso criar varias tarefas com quartz pra executar apenas uma vez de acordo com a hora em uma tabela no banco.

Perguntas: 1) Como eu faço pra rodar apenas uma vez uma, no exemplo que eu fiz aqui ele roda de 10 em 10 segundos?
Scheduler agendador = StdSchedulerFactory.getDefaultScheduler( );
			JobDetail detalhe = new JobDetail("Tarefa exemplo", Scheduler.DEFAULT_GROUP, Tarefa.class);
					
			Trigger trigger = TriggerUtils.makeSecondlyTrigger( 10 );
			trigger.setName("Trigger exemplo");
			trigger.setStartTime(new Date());
			
			agendador.scheduleJob(detalhe,trigger);
			agendador.start();

2) E quando completar uma hora que a primeira tarefa executou como eu faço pra cancelar as tarefas que foram criadas...?

Grato

R

Ichi cara, agora vc me apertou… nao sei de cabeça…

Dá uma olhada na documentação do quartz… para ver esses detalhes…

Na verdade conheço bem pouco de quartz… :frowning:

Criado 23 de março de 2010
Ultima resposta 3 de mai. de 2010
Respostas 8
Participantes 3