2012-10-02 5 views
6

ho implementato un'operazione pianificata primavera del campione, con un'applicationContext come segue,come smettere di processi pianificati utilizzando compito 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"/> 

Come posso fermare questo metodo programma?

risposta

3

Iniettare lo ThreadPoolTaskScheduler in un altro bean e richiamare shutdown(). Se ciò non è accettabile, è possibile configurare il bean cron per accettare un flag. Ad esempio:

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

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

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

Si noti che questo non rimuoverà il lavoro dallo scheduler. L'unico modo per evitare ciò sarebbe ottenere un riferimento allo ScheduledFuture e chiamare cancel().

+0

Hmm, Mi può scrivere un metodo di esempio che sarà fermare il mio compito cosí programma metodo show()? – witek010

+0

@ user1579075: terminato. –

+0

OK, quindi come posso rimuovere il lavoro dallo scheduler? Potrebbe darmi un axample? – witek010

1

Dipende da cosa intendi per "stop".

  1. Affari condizione di arresto: Stop di risultato di una condizione di lavoro, si dovrebbe avere queste condizioni valutate nei vostri metodi e semplicemente non eseguire il codice. In questo modo è possibile interrompere l'esecuzione indesiderata in fase di esecuzione, eseguire la logica per gestire la condizione di errore (registrazione, notifica, ecc.) Come risultato.

  2. non Condizione Affari: esternare l'espressione Chron a file di proprietà o come preferisco una variabile di sistema nella JVM. Quindi puoi semplicemente modificare il valore della proprietà in uno scenario 9999 per interrompere qualsiasi esecuzione.

Esempio di variabile di sistema.

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

Problemi correlati