2015-10-05 53 views

回答

3

你不能。當您設置fixedDelay屬性-1或試圖使用@Scheduled不指定任何屬性的有效值,春天會抱怨沒有屬性設置:

完全'cron''fixedDelay(String)',或'fixedRate(String)'屬性之一是要求

您可以通過檢查ScheduledAnnotationBeanPostProcessor#processScheduled的源代碼來驗證此行爲。

它包含諸如邏輯:

boolean processScheduled = false; 

// ... 

if (fixedRate >= 0) { 
    Assert.isTrue(!processedSchedule, errorMessage); 
    processedSchedule = true; 
    this.registrar.addFixedRateTask(new IntervalTask(runnable, fixedRate, initialDelay)); 
} 

// ... 

Assert.isTrue(processedSchedule, errorMessage); 

看看這個SO post一些選項有條件禁止@Scheduled

+0

哦,這是一個恥辱 - 感謝您的調查。我猜想在鏈接的文章中沒有提到的一種可能的解決方法可能是爲'initialDelay'和'fixedDelay'設置非常高的值(即最大'long')值,以免它們實際到達。這可能在實踐中有效,但似乎有點不妥,不得不訴諸於此,而且Spring並沒有提供「從不」的選擇。 –

+1

@SteveChambers是的,這似乎有點破解。另外,如果您要從配置中檢索值並使用'fixedDelayStr'進行設置,則將使用'Integer.parseInt'而不是'Long.parseLong'進行解析,因此將其設置爲long的最大值將會失敗:) ...稍後我會在Spring JIRA上報告它。 –

+0

哦,親愛的,看起來'fixedDelayStr'對於這種方法來說是不可能的,那麼最大整數是2147483647,如果我的谷歌輔助計算是正確的,以毫秒爲單位等於3個半星期 - 292471208年,我認爲'長'會允許! –

相關問題