Agendador de Tarefas Java: Quartz Scheduler – Guia Completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Agendador de Tarefas Java: Quartz Scheduler



No desenvolvimento moderno em Java, surge frequentemente a necessidade de executar código em horários programados: envio de newsletters por email, limpeza de cache, geração de relatórios ou sincronização de dados. Para esses fins, existe a poderosa biblioteca Quartz Scheduler — o padrão de facto para agendamento de tarefas no ecossistema Java.



O Quartz Scheduler é um framework open-source que permite criar, agendar e gerenciar tarefas (Jobs) usando um sistema flexível de triggers. Ele suporta tanto atrasos simples quanto cronogramas cron complexos, é resiliente a falhas e pode ser integrado com Spring Boot, Jakarta EE e outras plataformas.



Principais Funcionalidades

  • Agendamento Flexível — suporte para triggers simples (SimpleTrigger) com atraso e repetição, além de cron-triggers (CronTrigger) para cronogramas complexos.
  • Persistência — tarefas e triggers podem ser armazenados em banco de dados (JDBC JobStore), garantindo a execução mesmo após a reinicialização da aplicação.
  • Clusterização — possibilidade de executar várias instâncias do agendador com coordenação via banco de dados.
  • Listeners — escuta de eventos de execução de tarefas (JobListener, TriggerListener) para logging ou processamento adicional.
  • Monitoramento — API integrada para visualizar tarefas atuais, seu status e histórico de execução.


Instalação e Configuração

Para começar, adicione a dependência ao seu pom.xml (Maven):

<dependency>    <groupId>org.quartz-scheduler</groupId>    <artifactId>quartz</artifactId>    <version>2.3.2</version></dependency>

Para Gradle:

implementation 'org.quartz-scheduler:quartz:2.3.2'


Exemplo de Criação de uma Tarefa Simples

Criaremos uma classe que implementa a interface Job. Esta é a nossa tarefa:

import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import java.time.LocalTime;

public class SimpleJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Tarefa executada às: " + LocalTime.now()); // Aqui seu código de negócio }}


Agendamento de Tarefa com SimpleTrigger

Executaremos a tarefa após 5 segundos e repetiremos a cada 10 segundos:

import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;

public class SimpleSchedulerExample { public static void main(String[] args) throws SchedulerException { // 1. Criamos o agendador Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

// 2. Definimos a tarefa (JobDetail) JobDetail job = JobBuilder.newJob(SimpleJob.class) .withIdentity("myJob", "group1") .build();

// 3. Criamos o trigger: início após 5 segundos, repetição a cada 10 segundos Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .startAt(DateBuilder.futureDate(5, DateBuilder.IntervalUnit.SECOND)) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build();

// 4. Atribuímos a tarefa ao trigger e iniciamos scheduler.scheduleJob(job, trigger); scheduler.start(); }}


Uso de CronTrigger para Cronogramas Complexos

Expressões cron permitem definir cronogramas de qualquer complexidade. Por exemplo, todos os dias às 9:30 da manhã:

Trigger cronTrigger = TriggerBuilder.newTrigger()        .withIdentity("cronTrigger", "group1")                    

Recommendations