java - programadas - quartz spring
Expresión cron de cuarzo para ejecutar el trabajo cada 14 minutos a partir de ahora (6)
"0 0/14 * * *?" significa la siguiente hora de fuego desde el comienzo del reloj para cada intervalo de 14 minutos, como lo que dijiste.
El 1er ''0'' significa SEGUNDO en 0 (o 12) en el reloj; y lo mismo para el 2 ° ''0'', que significa el MINUTO a 0 (o 12) en el reloj; ''/ 14'' significa 14 minutos como intervalo.
Así que obtenga el SEGUNDO y MINUTO de la hora actual y concatenarlos con el intervalo en una expresión cron y luego dispararlo. Debajo está el ejemplo para Java:
public static String getCronExpressionFromNowWithSchedule(int minuteInterval) throws Exception {
String cronExpression = "";
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH); // Note: zero based!
int day = now.get(Calendar.DAY_OF_MONTH);
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
int millis = now.get(Calendar.MILLISECOND);
if (minuteInterval<=0) cronExpression = (second+1)+" * * * * ?";
else cronExpression = (second+1)+" "+minute+"/"+minuteInterval+" * * * ?";
System.out.println(cronExpression);
return cronExpression;
}
La próxima hora de disparo es en el segundo segundo desde la hora actual para el intervalo de minutos que pasaste a este método.
Quiero ejecutar un trabajo cada 14 minutos desde ahora.
Por ejemplo, si programo un trabajo a las 11:04 a.m., usando 0 0/14 * * * ?
expresión cron. entonces el tiempo de fuego esperado supone ser 11: 18,11: 32,11: 46 y así sucesivamente. pero disparará a las 11: 00,11: 14: 11,28: 11: 42,11: 56,12: 00, lo cual no se espera. y por qué disparó a las 12:00 en punto después de las 11:56, hay una diferencia de solo 4 minutos.
- ¿Cómo puedo lograr lo que quiero usando la expresión cron?
- ¿Alguien puede explicarme este comportamiento del cron de cuarzo?
Gracias por adelantado.
Bueno, 0/14 le da tiempo de fuego a las 00, 14, 28, 42, 56 y otra vez a los 00 minutos de cada hora. Entonces el último intervalo no será 14 sino 4 minutos. Así es como funciona cron. Puede obtener intervalos iguales en minutos solo para casos en los que el resto de la división 60 por su intervalo sea cero.
Deberías cambiar tu expresión cron
a 0 0/14 * 1/1 * ? *
0 0/14 * 1/1 * ? *
Lo entiendes mal 0/14
significa que se disparará cada hora comenzando desde 0
después de 14min
. Es por eso que está disparando a las 12.00
Usa esta expresión cron
0 0/14 * *
*?
su expresión cron debería verse como
0 0/14 * 1/1 * ? *
Un excelente sitio web para crear su expresión cron cuando tenga dudas: http://www.cronmaker.com/
le ayudará a construir su expresión cron y le mostrará las próximas fechas de activación de su cron.
Para más referencia: http://www.nncron.ru/help/EN/working/cron-format.htm