2012-12-13 21 views
7

我需要取消彈簧計時器的執行或者至少根據一些條件改變執行頻率。同時使用了org.springframework.scheduling.quartz.SimpleTriggerBeanorg.springframework.scheduling.timer.ScheduledTimerTask。無法找到如何做到這一點。如何取消彈簧計時器的執行

回答

0

這是迄今爲止不是最好的解決方案,但如果你不能提出任何其他的東西,你總是可以使用一個布爾值來檢查每次事件被觸發時,如果布爾值爲false, timertask應該立即終止。

+0

這就是我實際做的。這種方法絕對不是可取的,因爲如果滿足某些條件,我不想再次執行任務。 – BigWonder

14

注意:這是春天3.0+

  1. Spring documentation on scheduling tasks

  2. 使用TaskScheduler服務,如TimerManagerTaskSchedulerThreadPoolTaskScheduler

  3. 通過調用TaskScheduler.schedule*()方法並存儲返回ScheduledFuture來安排您的任務。

  4. 當你想取消執行,請調用ScheduledFuture.cancel()。這將阻止你的任務的進一步調用。目前,您可以通過調用TaskScheduler.schedule*()針對不同參數的任務重新安排時間。

+0

我的bean是在spring xml文件中調配的。我如何從那裏獲得TaskScheduler的實例?您是否說我需要在我的Java代碼中配置所有這些? – BigWonder

+0

只需使用''元素實例化TaskScheduler並將其注入到任何要使用它的位置 – gpeche

+0

建議的解決方案實現:https://stackoverflow.com/questions/39152599/ –

0

的解決方案是一個id分配給org.springframework.scheduling.timer.TimerFactoryBean,然後從應用程序檢索該豆,將它轉換爲定時器和調用該對象的取消方法。

+0

' ' 然後你可以得到myScheduler和'cancel()'。 – Andre