Planificador de tareas Java: Quartz Scheduler
En el desarrollo moderno con Java, a menudo surge la necesidad de ejecutar ciertas acciones según un horario: envío de correos electrónicos masivos, archivado de registros, sincronización de datos o generación de informes. Para resolver estas tareas, existe una biblioteca potente y flexible llamada Quartz Scheduler. Es un framework de código abierto que permite crear, programar y gestionar tareas (Jobs) utilizando disparadores (Triggers) y expresiones cron. Quartz se integra fácilmente con Spring Boot, Java EE y cualquier aplicación independiente.
Características principales de Quartz
- Programación flexible — soporte para intervalos simples (cada N segundos/minutos) y expresiones cron complejas.
- Persistencia — almacenamiento del estado de las tareas en una base de datos (JDBC JobStore) para recuperación tras reinicios de la aplicación.
- Agrupación en clúster — distribución de tareas entre varios nodos para tolerancia a fallos.
- Ejecución paralela — posibilidad de ejecutar múltiples tareas simultáneamente.
- Ejecuciones omitidas — configuración del comportamiento en caso de inactividad (instrucciones misfire).
Instalación y configuración
Para usar Quartz, agregue la dependencia en 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'Creación de una tarea simple
Cada tarea en Quartz es una clase que implementa la interfaz Job. Dentro del método execute() se escribe la lógica de negocio.
import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;
public class HelloJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("¡Hola! Tarea ejecutada a las " + new java.util.Date()); }}Configuración del planificador y del disparador
El planificador (Scheduler) se crea a través de la fábrica StdSchedulerFactory. Luego se crea un disparador: simple (SimpleTrigger) o basado en cron (CronTrigger).
import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;
public class QuartzExample { public static void main(String[] args) throws SchedulerException { // 1. Obtenemos el planificador Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 2. Definimos la tarea JobDetail job = JobBuilder.newJob(HelloJob.class) .withIdentity("myJob", "group1") .build();
// 3. Creamos el disparador — ejecución cada 10 segundos Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build();
// 4. Vinculamos la tarea al disparador e iniciamos el planificador scheduler.scheduleJob(job, trigger); scheduler.start(); }}Uso de expresiones cron
Las expresiones cron permiten definir horarios complejos. Formato: segundos minutos horas día-del-mes mes día-de-la-semana.
// Ejecución cada día a las 18:30CronScheduleBuilder cronSchedule = CronScheduleBuilder .dailyAtHourAndMinute(18, 30);
// O manualmente: "0 30 18 * * ?" (cada día a las 18:30)Trigger cronTrigger = TriggerBuilder.newTrigger() .withIdentity("cronTrigger", "group1") .withSchedule(CronScheduleBuilder.cronSchedu También en la biblioteca
Aprendizaje automático en Rust: revisión de bibliotecas para Data Science
Generación de Swagger/OpenAPI para C++: revisión de herramientas y bibliotecas
Envío de correo electrónico en Go (Golang): bibliotecas y ejemplos de código
Generación de PDF en PHP: bibliotecas, herramientas y ejemplos de código