Planificador de tareas Java: Quartz Scheduler – guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Planificador de tareas Java: Quartz Scheduler



En el desarrollo moderno con Java, a menudo surge la necesidad de ejecutar código según un horario: envío de correos masivos, limpieza de caché, generación de informes o sincronización de datos. Para estos fines, existe la potente biblioteca Quartz Scheduler, el estándar de facto para la planificación de tareas en el ecosistema Java.



Quartz Scheduler es un framework de código abierto que permite crear, planificar y gestionar tareas (Jobs) mediante un sistema flexible de disparadores. Admite tanto retrasos simples como complejas programaciones cron, es resistente a fallos y se puede integrar con Spring Boot, Jakarta EE y otras plataformas.



Características principales

  • Planificación flexible — soporte para disparadores simples (SimpleTrigger) con retraso y repetición, así como disparadores cron (CronTrigger) para programaciones complejas.
  • Persistencia — las tareas y disparadores pueden almacenarse en una base de datos (JDBC JobStore), lo que garantiza la ejecución incluso después de reiniciar la aplicación.
  • Agrupación en clúster — posibilidad de ejecutar múltiples instancias del planificador con coordinación a través de la base de datos.
  • Listeners — escucha de eventos de ejecución de tareas (JobListener, TriggerListener) para registro o procesamiento adicional.
  • Monitoreo — API integrada para ver las tareas actuales, su estado e historial de ejecución.


Instalación y configuración

Para empezar, agregue la dependencia en su 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'


Ejemplo de creación de una tarea simple

Creemos una clase que implemente la interfaz Job. Esta es nuestra tarea:

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("Tarea ejecutada a las: " + LocalTime.now()); // Aquí su código de negocio }}


Planificación de una tarea con SimpleTrigger

Ejecutemos la tarea después de 5 segundos y repitamos cada 10 segundos:

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

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

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

// 3. Creamos el disparador: inicio en 5 segundos, repetición 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. Asignamos la tarea al disparador y la iniciamos scheduler.scheduleJob(job, trigger); scheduler.start(); }}


Uso de CronTrigger para programaciones complejas

Las expresiones cron permiten definir programaciones de cualquier complejidad. Por ejemplo, todos los días a las 9:30 a.m.:

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

Recommendations