2011-04-07 59 views
1

我有一個Spring批處理應用程序,它使用JdbcCursorItemReader從數據庫表中讀取數據,並使用FlatFileItemWriter將其寫入平面文件。Spring批處理 - 如何在ItemReader不返回數據時失敗作業

當我測試我的應用程序時,我發現即使沒有數據通過JdbcCursorItemReader從數據庫返回,FlatFileItemWriter也會創建一個文件。但是,如果數據庫中沒有適當的數據,我打算失​​敗。是否有可能這樣做,或至少prevenet創建一個文件的FlatFileItemWriter?即使沒有數據

問候

回答

0

ItemReadListener的afterRead方法將被調用。你可以把你想要的東西放在那裏。

0

僅當ItemReader返回一個對象時纔會調用ItemProcessor。 空值用於指示處理完成。

不要使用空值作爲錯誤指示:它的目的是結束處理。 你最好爲你的錯誤使用例外。

+0

感謝來自OCTO – Fabinout 2016-03-14 14:14:24

3

http://static.springsource.org/spring-batch/reference/html/patterns.html

11.7。當沒有輸入時,處理步驟完成

在許多批處理方案中,在數據庫或文件中找不到要處理的行並不例外。簡單地認爲該步驟沒有找到任何工作,並完成0個項目的閱讀。所有在Spring Batch中提供的ItemReader實現都默認採用這種方法。即使輸入存在,如果沒有寫出任何內容,這可能會導致一些混淆。 (通常在文件名稱錯誤時發生,等等)。爲此,應該檢查元數據本身以確定框架發現要處理多少工作。但是,如果發現沒有輸入被認爲是特例?在這種情況下,以編程方式檢查元數據是否是未處理的項目並導致失敗是最佳解決方案。因爲這是一個常見的情況,一個監聽器設有隻此功能:

public class NoWorkFoundStepExecutionListener extends StepExecutionListenerSupport { 

public ExitStatus afterStep(StepExecution stepExecution) { 
    if (stepExecution.getReadCount() == 0) { 
     return ExitStatus.FAILED; 
    } 
    return null; 
} 

} 
+0

**所有在Spring Batch中提供的ItemReader實現默認爲這種方法**,我正在使用'JdbcPagingItemReader'並且它將作業標記爲失敗,如果閱讀器沒有任何行開始。我錯過了什麼嗎? – 2016-08-29 10:32:56

+0

我還添加了聽衆所描述的答案和步驟註冊,但作業仍然標記爲失敗。對於我的場景,沒有行是有效的情況。 – 2016-08-29 10:39:33

0

是否有可能這樣做,或至少防止FlatFileItemWriter從 創建一個文件?

對於第二部分的問題FlatFileItemWriter你有一個flag刪除該文件,如果什麼也沒寫。

shouldDeleteIfEmpty:表示如果在關閉時沒有寫入行(不包括頁眉和頁腳),則應刪除目標文件。

相關問題