2012-10-02 10 views
6

he implementado una tarea programada de primavera de la muestra, con un applicationContext de la siguiente manera,Cómo parar los trabajos programados usando tarea de primavera

<task:scheduled-tasks scheduler="myScheduler"> 
    <task:scheduled ref="cron" method="show" cron="0/10 * * * * ?"/> 
    <task:scheduled ref="cron" method="show2" cron="0/15 * * * * ?"/> 
</task:scheduled-tasks> 

<task:scheduler id="myScheduler" pool-size="10"/> 

¿Cómo puedo detener este método de programación?

Respuesta

3

Inyecte el ThreadPoolTaskScheduler en otro bean, e invoque shutdown(). Si eso no es aceptable, puede configurar el bean cron para aceptar un indicador. Por ejemplo:

public class Job() { 
    private final AtomicBoolean stop = new AtomicBoolean(false); 

    public void show() { 
     if (stop.get()) { 
      return; 
     } 
     ... 
    } 

    public void stop() { 
     stop.set(true); 
    } 
} 

Tenga en cuenta que esto no eliminará el trabajo del planificador. La única manera de prevenir eso sería obtener una referencia al ScheduledFuture y llamar al cancel().

+0

Hmm, ¿Me podría escribir un ejemplo de método que se detiene mi TAKS horario método show()? – witek010

+0

@ user1579075: hecho. –

+0

OK, entonces ¿Cómo puedo eliminar el trabajo del planificador? Podría darme un axample? – witek010

1

Depende de lo que quiere decir con "detener".

  1. negocios condición de parada: parada como resultado de una condición negocio, usted debe tener las condiciones evaluadas en sus métodos y simplemente no ejecutar el código. De esta manera puede detener la ejecución no deseada en el tiempo de ejecución, ejecute su lógica para manejar el error de condición (registro, notificación, etc.) como resultado.

  2. no Condición de actividad: exteriorizar la expresión Chron al archivo de propiedades o como yo prefiero una variable de sistema en la JVM. Luego puede simplemente cambiar el valor de la propiedad a un escenario 9999 para detener cualquier ejecución.

Variable del sistema Ejemplo.

<task:scheduled-tasks scheduler="myScheduler"> 
<task:scheduled ref="cron" method="show" cron="#{systemProperties['chron1']}"/> 
<task:scheduled ref="cron" method="show2" cron="#{systemProperties['chron2']}"/> 

Cuestiones relacionadas