Saltar al contenido
CronExplain

Explicador de expresiones cron de Spring

La anotación @Scheduled(cron = "...") de Spring usa un formato cron de seis campos con los segundos primero. Pega una expresión de Spring para leerla en lenguaje claro y comprobar sus próximas ejecuciones en la zona horaria de tu servidor.

Qué significa

Spring @Scheduled: seis campos con los segundos primero, 0 o 7 = domingo; admite L, W, # y macros como @daily.

✓ Válida · Qué significa

A las 09:00, de lunes a viernes

Ajustes rápidos

Próximas 10 ejecuciones

#En UTCTu hora local
1——
2——
3——
4——
5——
6——
7——
8——
9——
10——

La misma programación en otros dialectos

  • crontab estándar0 9 * * 1-5
  • Quartz0 0 9 ? * MON-FRI
  • AWS EventBridgecron(0 9 ? * MON-FRI *)Las reglas de EventBridge usan UTC.

Constructor visual

Elige valores para cada campo. El constructor genera una expresión estándar de cinco campos que se convierte al dialecto seleccionado al usarla.

Minuto
Hora
Día del mes
Mes
Día de la semana
0 9 * * 1-5

Formato cron de Spring

Una expresión de Spring tiene seis campos: segundo, minuto, hora, día del mes, mes y día de la semana; por ejemplo 0 0 9 * * MON-FRI para las 09:00 de los días laborables. El domingo puede escribirse 0, 7 o SUN. Desde Spring Framework 5.3 el analizador entiende también L, W y # en los campos de día, además de macros como @hourly y @daily.

Zona horaria de @Scheduled

Por defecto, las expresiones se evalúan en la zona horaria predeterminada del servidor. Define el atributo zone, por ejemplo @Scheduled(cron = "0 0 2 * * *", zone = "Europe/Madrid"), para que la programación no dependa del host. Elige la misma zona en la herramienta para previsualizar las ejecuciones.

Spring frente a Quartz

Las expresiones de Spring se parecen a las de Quartz, pero cambian detalles: no hay campo de año, el domingo es 0 y no 1, y «?» se acepta pero no es obligatorio. Cuando ambos campos de día están restringidos, Spring exige que coincidan los dos. El conversor muestra el equivalente de Quartz cuando existe.

Activar la planificación

Los métodos con cron solo se ejecutan si activas la planificación con @EnableScheduling. Por defecto Spring usa un único hilo, así que una tarea larga retrasa a todas las demás; configura un ThreadPoolTaskScheduler o spring.task.scheduling.pool.size si tienes varias. En un clúster, cada instancia dispara el mismo cron: usa un bloqueo como ShedLock si una tarea debe ejecutarse una sola vez.

Preguntas frecuentes

¿Por qué Spring dice que la expresión debe tener seis campos?
Spring necesita un campo de segundos. Antepón 0 a una expresión de crontab de cinco campos: 0 */5 * * * * se ejecuta cada cinco minutos.
¿Cómo desactivo una tarea @Scheduled con cron?
Usa el valor especial "-" (Scheduled.CRON_DISABLED), normalmente mediante un marcador de propiedad.
¿Spring admite el último día del mes?
Sí, desde la 5.3: 0 0 0 L * * se ejecuta a medianoche el último día de cada mes.
¿Puedo leer la expresión cron desde la configuración?
Sí, por ejemplo @Scheduled(cron = "${jobs.cleanup.cron}"), para que la programación cambie según el entorno.