2012-12-13 21 views
7

Devo annullare l'esecuzione del timer di primavera o almeno modificare la frequenza di esecuzione in base ad alcune condizioni. Stava usando sia org.springframework.scheduling.quartz.SimpleTriggerBean e org.springframework.scheduling.timer.ScheduledTimerTask. Non riesci a trovare il modo in cui farlo.Come annullare l'esecuzione del timer di primavera

risposta

0

Questa non è la soluzione migliore, ma se non riesci a trovare altro, puoi sempre usare un booleano che verrebbe controllato ogni volta che l'evento viene attivato e se il booleano è falso il metodo di esecuzione del il timertask dovrebbe terminare immediatamente.

+0

Questo è quello che ho effettivamente fatto. Questo approccio non è sicuramente preferibile in quanto non desidero eseguire nuovamente l'attività se si verifica una condizione. – BigWonder

14

NOTA: Questo è per la primavera 3.0+

  1. Spring documentation on scheduling tasks Leggi

  2. utilizzare un servizio TaskScheduler, come ad esempio un TimerManagerTaskScheduler o ThreadPoolTaskScheduler.

  3. programmare il vostro compito richiamando alcune TaskScheduler.schedule*() metodo e memorizzare il rientrante ScheduledFuture.

  4. Quando si desidera annullare l'esecuzione, richiamare ScheduledFuture.cancel(). Ciò fermerà ulteriori invocazioni del tuo compito. A questo punto, puoi riprogrammare se lo desideri chiamando lo TaskScheduler.schedule*() per l'attività con parametri diversi.

+0

I miei bean sono forniti nel file xml primaverile. Come ottengo un'istanza di TaskScheduler da lì? Stai dicendo che devo eseguire il provisioning di tutto nel mio codice Java? – BigWonder

+0

Basta istanziare TaskScheduler usando un elemento '' e iniettalo ovunque tu voglia utilizzarlo. – gpeche

+0

Implementazione della soluzione proposta: https://stackoverflow.com/questions/39152599/ –

0

La soluzione è assegnare un ID al org.springframework.scheduling.timer.TimerFactoryBean e quindi recuperare questo bean dall'applicazione, associarlo al timer e chiamare cancellare metodo su quell'oggetto.

+0

' ' Quindi puoi ottenere myScheduler e' cancel() '. – Andre