Saltar al contenido

Quartz Java al reanudar un trabajo lo ejecuta muchas veces

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *