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
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.
NOTA: Questo è per la primavera 3.0+
utilizzare un servizio
TaskScheduler
, come ad esempio unTimerManagerTaskScheduler
oThreadPoolTaskScheduler
.programmare il vostro compito richiamando alcune
TaskScheduler.schedule*()
metodo e memorizzare il rientranteScheduledFuture
.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 loTaskScheduler.schedule*()
per l'attività con parametri diversi.
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
Basta istanziare TaskScheduler usando un elemento '
Implementazione della soluzione proposta: https://stackoverflow.com/questions/39152599/ –
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.
'
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