Formato cron do Quartz
Uma expressão Quartz tem seis ou sete campos: segundos, minutos, horas, dia do mês, mês, dia da semana e um ano opcional. Por exemplo, 0 0 12 ? * MON-FRI dispara ao meio-dia nos dias úteis. Os dias da semana vão de 1 (domingo) a 7 (sábado), e nomes como MON ou FRI são aceitos, inclusive em intervalos.
A regra do ponto de interrogação
O Quartz não permite restringir ao mesmo tempo o dia do mês e o dia da semana. Exatamente um dos dois campos deve conter “?”, que significa “sem valor específico”. Por isso 0 0 12 * * MON é inválido; escreva 0 0 12 ? * MON. O explicador aponta isso na hora.
Caracteres especiais L, W e #
L significa “último”: L no dia do mês é o último dia do mês, L-3 é três dias antes, e 6L no dia da semana é a última sexta-feira. W encontra o dia útil mais próximo de uma data sem sair do mês, então 15W dispara no dia útil mais próximo do dia 15, e LW é o último dia útil do mês. A cerquilha escolhe o enésimo dia da semana: 6#3 é a terceira sexta-feira.
Quartz na prática
No código Java, uma expressão Quartz é associada a um gatilho, por exemplo TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 ? * MON-FRI").inTimeZone(TimeZone.getTimeZone("America/Sao_Paulo"))). Sem inTimeZone, vale o fuso padrão da JVM. As instruções de misfire definem o que acontece se o agendador estava parado no horário previsto: disparar uma vez agora ou pular para o próximo horário.
Perguntas frequentes
- Qual a diferença entre o cron do Quartz e o do Unix?
- O Quartz adiciona um campo de segundos no início e um ano opcional no fim, numera os dias a partir de 1 = domingo, exige “?” em um campo de dia e suporta L, W e #.
- Posso converter uma expressão Quartz para crontab?
- Sim, desde que os segundos sejam 0, não haja ano definido e não se usem L, W ou #. O conversor mostra o equivalente em crontab ou explica por que ele não existe.
- O que significa 0 0/5 * * * ?
- Dispara a cada cinco minutos, no segundo 0, a partir do minuto 0 de cada hora, todos os dias.
- O cron do @Scheduled do Spring é igual ao do Quartz?
- Muito parecido, mas o Spring numera o domingo como 0 ou 7, não tem campo de ano e não exige “?”. Use a página do Spring para expressões Spring.