2016-01-29 63 views
0

我使用@Scheduled註釋每兩分鐘運行一次代碼。但是,我們的工作往往會運行更長的時間。據我瞭解,@Scheduled註釋排隊新作業,並在第一份工作完成後立即運行它們。我不希望發生這種情況。我希望那裏只有一個正在運行的作業實例,沒有排隊的實例。我怎樣才能做到這一點?如何停止Spring @ Scheduled排隊工作

@Scheduled(cron = "0 */2 * * * ?") 
public void twoMinMethod() { 
    // code here 
} 
+0

嗯,這取決於。如果你有一個帶有多個線程的'TaskExecutor',並且有空閒線程,那麼你有多個併發執行。直到池用完爲止,根據所選擇的策略,作業將排隊,丟棄或您將收到異常。所以實際上取決於。如果你想要一個單一的實例,你需要使用一個像石英這樣的調度器來爲它提供支持。 –

回答

1

如果您不需要的微小正好運行的作業,您可能需要切換到其他非crontab的語法,這將允許這樣的事情。下面的例子將執行該方法,等待兩分鐘後再執行。

@Scheduled(fixedDelay=120000) 
public void twoMinMethod() { ... } 

查看更多的Spring Documentation