Este equipo especializado luego de algunos días de investigación y de juntar de datos, dieron con los datos necesarios, nuestro deseo es que resulte útil para ti en tu proyecto.
Solución:
los CronTrigger
funciona recordando el nextFireTime
. Después de crear el activador, el nextFireTime
se inicializa. Cada vez que se activa el trabajo nextFireTime
se actualiza Dado que el trabajo no se activa cuando está en pausa nextFireTime
sigue siendo “viejo”. Entonces, después de reanudar el trabajo, el disparador regresará cada tiempo de disparador anterior.
El problema es que el disparador no sabe que está en pausa. Para superar esto, existe este manejo de fallos de encendido. Después de reanudar los trabajos, el gatillo updateAfterMisfire()
se invocará el método que corrige el nextFireTime
. Pero no si la diferencia entre nextFireTime
y ahora es menor que el umbral de fallo de encendido. Entonces el método nunca se llama. El valor predeterminado de este umbral es 60.000. Por lo tanto, si su período de pausa fuera más largo que 60, todo estaría bien.
Ya que tienes problemas supongo que no lo es. 😉 Para solucionar esto, puede modificar el umbral o usar un envoltorio simple CronTrigger
:
public class PauseAwareCronTrigger extends CronTrigger
// constructors you need go here
@Override
public Date getNextFireTime()
Date nextFireTime = super.getNextFireTime();
if (nextFireTime.getTime() < System.currentTimeMillis())
// next fire time after now
nextFireTime = super.getFireTimeAfter(null);
super.setNextFireTime(nextFireTime);
return nextFireTime;
Si pausa el trabajo, el activador seguirá disparándose, pero las ejecuciones se pondrán en cola hasta que se reanude el trabajo. Este no es un gatillo que falla, por lo que la configuración no tendrá efecto.
Creo que lo que quiere hacer es deshabilitar o eliminar mediante programación el activador cron, en lugar de pausar el trabajo. Cuando desee reanudar, vuelva a agregar el disparador.
Finalizando este artículo puedes encontrar las reseñas de otros usuarios, tú aún tienes la libertad de mostrar el tuyo si te apetece.