Crear tareas programadas en Spring Boot

Crear cronjobs o tareas programadas en Spring Boot

En ocasiones necesitamos programar la ejecución automática de ciertas tareas, por ejemplo, emitir una alerta todos los días a una hora específica, ejecutar un query a una base de datos, envíar un correo con un recordatorio a nuestros trabajadores,etc. Siempre que una tarea tenga un intervalo de tiempo constante entre una ejecución y la siguiente, entonces podemos crear una tarea programada (cronjob) para ella.

Es muy sencillo crearla, para ello utilizaremos la anotación @Scheduled en un método que contenga la tarea que queremos programar.

package mx.edu.despertador;
import org.springframework.scheduling.annotation.Scheduled;
\\...imports

\\public class
@Scheduled(cron = "0 0 6 * * *", zone = "America/Mexico_City")
public void despertar() {
	System.out.println("¡Buenos días!");
	System.out.println("¡Buenos días!");
	System.out.println("¡Buenos días!");
	System.out.println("¡Buenos días!");
	System.out.println("DESPIERTAAAAAAAA");
}

El método anterior se ejecutaría todos los días a las 600 horas, GTM-6 Ciudad de México, puedes cambiar la zona horaria pero siempre te recomendamos escribirla porque en caso de que la hora de tu host esté mal, también la ejecución de tu método será en una hora diferente… Existen también los métodos fixedDelay ejecutará el método sobre el que esté escrito cada N milisegundos a partir de que finalice su ejecución y fixedRate ejecutará el método cada N milisegundos a partir del inicio de la ejecución de ese método.

@Scheduled(fixedDelay = 5000)
@Scheduled(fixedRate = 5000)

Además de lo anterior necesitarás agregar en la clase principal de tu aplicación las siguientes líneas comentadas:

package mx.edu.despertador;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
// @EnableScheduling
public class DespertadorApplication {

	public static void main(String[] args) {
		SpringApplication.run(DespertadorApplication.class, args);
	}
}

La sintaxis para los horarios de los cronjobs usando la anotación cron consta de 6 datos separados por un espacio, de la siguiente manera
@Scheduled(cron = “1 2 3 4 5 6”, zone = “America/Mexico_City”) en donde:
1 -> segundos (0-59)
2 -> minutos (0-59)
3 -> horas (0-23)
4 -> días (1-31)
5 -> meses (1-12)
6 -> día de la semana (1-7)

Algunos ejemplos son los siguientes:

@Scheduled(cron = "0 0 * * * *", zone="America/Mexico_City") = cada hora todos los días.
@Scheduled(cron = "*/10 * * * * *", zone="America/Mexico_City") = cada 10 segundos.
@Scheduled(cron = "0 0 8-10 * * *", zone="America/Mexico_City") = todos los días a las 800,900 y 1000 horas.
@Scheduled(cron = "0 0 6,19 * * *", zone="America/Mexico_City") = todos los días a las 600 y 1900 horas.
@Scheduled(cron = "0 0/30 8-10 * * *", zone="America/Mexico_City") = todos los días a las 800, 830, 900, 930, 1000 y 1030 horas.
@Scheduled(cron = "0 0 9-17 * * MON-FRI", zone="America/Mexico_City") = desde las 900 hasta las 1700 horas de lunes a viernes.
comments powered by Disqus