Es una función muy común para Java Springboot usar la programación para ejecutar tareas de sincronización. Hay un sitio web muy utilizado que es el generador de expresiones Cron en línea, pero recientemente encontré un problema en este sitio web.
Quiero ejecutarlo una vez cada lunes a las 13:00. Verifiqué la expresión que escribí en este sitio web y está bien. Además, no hay problema en compararlo con el calendario, ¡¡¡pero ahora ha aparecido el problema !!!
Pero al mirar el registro del servidor, descubrí que la ejecución se realizó el 16 de mayo (martes), que es un día después de la hora de configuración de la tarea programada.
¡¡¡Esto, esto, esto es demasiado escandaloso!!!!
Después de la verificación, si se ejecuta una vez por semana, el lunes es el 1 y el martes es el 2, ¡recuerde no agregar 1 a la fecha!
Por ejemplo: ejecutar una vez cada lunes a la 1:00 pm:
@Programado(cron = "0 0 13 ? * 1")
La razón:
Diferentes representaciones de expresiones cron en horarios de Quartz y Springboot sobre la semana (día de la semana)
Explicación del código fuente oficial de Quartz (org.quartz.CronExpression):
La expresión cron en Quartz puede estar compuesta por hasta 7 campos, a saber: segundo, minuto, hora, día, mes, semana, año y el último campo "año" puede estar vacío;
Para el día de la semana, es decir, "Día de la semana", los valores 1, 2, 3, 4, 5, 6 y 7 representan respectivamente "DOM, LUN, MAR, MIÉ, JUEVES, VIE , SE SENTÓ";
Análisis de expresión cron de programación SpringBoot:
Reemplace "DOM, LUNES, MAR, MIÉ, JUEVES, VIE, SÁB" en la cadena cronExpression por "0, 1, 2, 3, 4, 5, 6" respectivamente;