2017-06-06 75 views
0

我正在使用塊讀取器,處理器和寫入器模式來處理我們的數據。我採取的方法是,在進入Reader的讀取方法之前,我運行一個連接到數據庫的sql並提取所有需要的數據。這是在用@BeforeStep註釋的方法中完成的,並且輸出數據成爲Reader讀取方法的源代碼,該方法遍歷此生成的數據併爲處理器每次讀取檢索一個項目。在流程中引發的任何異常都會使用@Retryable功能捕獲並重試,並使用可跳過的異常功能跳過。如何跳過用@BeforeStep註解的方法拋出的異常

一件事是混淆對我來說,那就是與@BeforeStep註釋的方法拋出的任何異常被捕獲和自定義的可跳過異常是由未得到由系統跳過應用拋出。這是期望的行爲還是我錯過了一些東西。請幫助我。

感謝, raveendra

+0

是在@BeforeStep提取數據的具體原因並沒有使用ItemReader直接基於SQL? –

+0

@LucaBassoRicci - 這是根據設計。我們想打開一個連接,運行一個大的sql來獲取數據並處理檢索到的數據。 – paul

回答

0

如果設計力量你從數據庫中提取數據,一個合理的解決方案是創建之前,主要的一個步驟,並從@BeforeStep移動代碼到這個新的臺階;您可以比在監聽器中更好地管理可跳過的異常和重試條件。

你可以看看這個答案(Can we write a Spring Batch Job Without ItemReader and ItemWriter);在Tasklet#execute()寫一樣的東西:

class MyTasklet implements Tasklet { 
@Override 
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { 
    // Fetch data using JdbcTemplate (for example) and pull to external bean to let extracted data visible to next step 
    return RepeatStatus.FINISHED; 
} 
} 

還檢查了SO「傳遞數據之間的步驟Spring Batch的」額外信息

+0

@ LucaBassoRicci - 這聽起來是一種選擇。我想了解,平臺是否有任何支持這種情況。 – paul

相關問題