2012-09-27 24 views
4

在開始工作之後,在工作之前 - 有些時候我們要優雅地終止工作(即根本不運行工作,但都沒有抱怨,即沒有例外)。目前這樣做的方式看起來像調用jobExecution.stop - 但是,這會導致JobInteruptedException,進一步導致logger.error調用。spring批次|在工作中完美的工作終止

是否還有其他更好的程序化選擇(無需人工干預)?

回答

2

你可以閱讀:

根據病情剛剛引入結束元素的第一步:

的「結束」元素指示作業停止與完成 一個BatchStatus。

+0

恐怕提出的解決方案需要額外的步驟。由於支票在beforeJob中,我甚至不想執行第一步,只是簡單地退出工作。 – Jaga

+0

真的沒有明白你的意思。假設你的工作是從文件讀取到數據庫,並且你希望它只在星期一運行,如果它是另一天,你不希望出現異常 - >優雅的作業終止。你會寫一個簡單的步驟(實際上是一個「如果」),根據你的情況,這個工作將會結束。哪部分不適合你的需求? –

+0

>>你會寫一個簡單的步驟 我不想寫這個額外的步驟,而是尋找像job.complete() 簡單直觀的東西避免寫一個步驟的另一個原因是(如果我是正確的我錯誤在這裏) - 這一步實際上是一個決策者(JobExecutionDecider類),我需要配置xml,告訴狀態是否完成/成功,然後結束工作,否則失敗的工作等..) 雖然有像job.complete( )將是一個非常方便的選擇 - 感謝您的時間提前 – Jaga

0

停止()指令將被激活只有當交易成功提交。 如果你所有的大塊回滾你的工作不停止。

我必須使這個解決方法: 創建ChunkListener和方法afterChunkError(ChunkContext chunkCtx)地說:

StepExecution stepExecution = chunkCtx.getStepContext().getStepExecution(); 
JobExecution jobExecution = jobExplorer.getJobExecution(stepExecution.getJobExecutionId()); 

if (jobExecution.getStatus().equals(BatchStatus.STOPPING)) { 
    stepExecution.setTerminateOnly(); 
} 

這將迫使"controlled"停止。

相關問題