2014-03-01 82 views
1

我希望能夠在滿足時序閾值時停止作業。我正在考慮兩種方法。首先是在afterStep停止工作。但是,如果在最後一步完成時,我不希望它具有「已停止」狀態。因此,我正在停止它在beforeStep。

我試着用在Spring批處理中的步驟中停止作業

public void beforeStep(StepExecution stepExecution) { 
    stepExecution.setStatus(BatchStatus.STOPPED); 
    return; 
} 

public void beforeStep(StepExecution stepExecution) { 
    stepExecution.setExitStatus(ExitStatus.STOPPED); 
    return; 
} 

這些都不曾嘗試。有什麼建議麼?

回答

1

上述代碼的問題是停止當前運行的步驟,而不是整個作業。

也許如果您在作業當前步驟配置中添加並調整以下代碼,則當步驟的ExitStatus爲STOPPED且再次運行時,作業將從下一步開始,將終止作業。
(來自here兩者)​​

<step id="step1" parent="s1"> 
    <stop on="STOPPED" restart="step2"/> 
</step> 


This也可能有助於解決退出狀態/ BatchStatus之間的混亂。

關於計時門檻......據我瞭解,到目前爲止,您計劃只測量當前步的時間(beforestep - afterstep),無論前幾步運行多久。要計算和以前的步驟,請嘗試在JobParameters中添加時間戳,並檢查該閾值何時通過。

0

您可以設置一個計時器(或類似的東西),當接收時間限制,如Stopping a job描述notitication停止作業。
如果您希望即使在上一步中廣播了時間警報,作業也能正常完成,您可以執行檢查(使用JobOperator)來查詢作業進度。

相關問題