2012-12-26 36 views
1

我正在處理Spring批處理:我正在讀取來自FlatFile的數據並使用Jdbc連接將從文件讀取的記錄保存到數據庫。雖然這樣做,我已經配置了一個偵聽器,如果在讀取或寫入數據時發生錯誤,將會調用該偵聽器。我將10條記錄上傳到2條記錄有錯誤的數據庫中。它根據我們的需要正確插入8條記錄,但onSkipInWrite()方法不會給出實際上被跳過的2條記錄,但它會打印出與整個批次相同的10條記錄。我應該如何過濾掉哪些記錄沒有被跳過實際上該方法表示您將獲得整個批次中正在跳過的確切記錄。請幫我....等待一種迴應.....感謝Spring批處理:SkipListener實現 - 但onSkipInWrite()方法拋出整個批處理相同的消息

在Audit.xml 樣品例如配置:

<step id="step1" > 
     <tasklet allow-start-if-complete="true"> 
      <chunk reader="Reader" writer="Writer" commit-interval="10" skip-limit="10"> 
       <skippable-exception-classes> 
        <include class="java.lang.Exception" /> 
       </skippable-exception-classes> 
      </chunk> 
      <listeners> 
       <listener ref="Listener" /> 
      </listeners> 
     </tasklet> 
    </step> 

我寫了下面一個監聽器類樣品:

public class Listener implements SkipListener { 


    @Override 
    public void onSkipInProcess(Object item, Throwable throw) { 
     System.out.print ("Error in the record :" + item.gettoString() + " Type of Error : " + throw.getClass()); 

    } 

    @Override 
    public void onSkipInRead(Throwable throw) { 
    } 

    @Override 
    public void onSkipInWrite(Object item, Throwable throw) { 

    System.out.print ("Error in the record :" + item.gettoString() + " Type of Error : " + throw.getClass()); 

} 

} 
+0

你的跳過在哪裏發生?從平面文件中讀取項目時?那麼你應該使用'onSkipInRead'方法。你沒有聲明任何物品處理器,所以'onSkipInProcess'永遠不會被調用。 'onSkipInWrite'只會被調用,如果在項目編寫器中引發異常,而您堅持實體。 –

回答

0

而不是skip-limit="10"

使用

   <batch:skip-policy> 
        <bean class="org.springframework.batch.core.step.skip.AlwaysSkipItemSkipPolicy" scope="step"/> 
       </batch:skip-policy> 
相關問題