2016-09-20 92 views
0

開始下面是我的重試配置:Spring Batch的重試 - 沒有春天開始離開的地方或從開始

<batch:job id="myLookUpLoadJob"> 
      <batch:step id="myLookUpTruncateStep"> 
       <batch:tasklet ref="myLookupTruncateTasklet" /> 
       <batch:next on="*" to="myLookUpLoadStep"/> 
      </batch:step> 
      <batch:step id="myLookUpLoadStep">    
       <batch:tasklet> 
         <batch:chunk reader="myLookupItemReader" 
           writer="myLookupItemWriter" commit-interval="100" retry-limit="2"> 
           <retryable-exception-classes> 
             <include class=" org.springframework.dao.DataAccessResourceFailureException"/> 
           </retryable-exception-classes> 
         </batch:chunk> 
       </batch:tasklet>   
      </batch:step> 
    </batch:job> 

下面是我的問題,而我無法擺脫春季DOC答案 - 將不勝感激輸入:

當發生重試後處理200行發生異常時,它是從行201開始還是從行1開始?

編輯

我試圖解決的問題是,在執行作業時,後立即提交第一個塊(100行),到ItemReader的連接被終止(復位)。作業然後重新啓動併成功完成。

我想知道如果這可能幫助:

從AbstractCursorItemReader

有將共享用於光標與步處理的其它部分連接的選項(setUseSharedExtendedConnection(布爾) 。如果你將這個標誌設置爲true,那麼你必須將DataSource包裝在ExtendedConnectionDataSourceProxy中,以防止在作爲步驟處理的一部分執行每次提交之後關閉和釋放連接。還必須使用支持JDBC 3.0或更高版本的JDBC驅動程序,因爲光標將隨附加打開選項'HOLD_CURSORS_OVER_COMMIT'已啓用。

+0

你在用什麼讀卡器? –

+0

org.springframework.batch.item.database.JdbcCursorItemReader。讀寫也是針對兩種不同的數據源,這就是爲什麼最初我想追求XA分佈式事務。 –

+0

@MichaelMinella - 你有沒有更新?我計劃在下週初嘗試重啓(因爲我們本週已部署)。 AbstractCursorItemReader中的文檔UseSharedExtendedConnection似乎很適合嘗試。 –

回答

1

這取決於你的讀者。 ItemReader實現負責通過ItemStream接口回調在ExecutionContext中堅持自己的狀態。如果ItemReader通過ItemStream#update方法持續保留它的狀態(在這種情況下我會假設的行號),如果ItemReader通過ItemSteam#open回調方法恢復該狀態,那麼我希望它在正確的行重新啓動。所有Spring提供的ItemReader實現在有意義的地方使用這個功能。由於我對myLookupItemReader在您的配置中沒有任何瞭解,因此我無法分辨您的問題。

+0

謝謝@Michael的詳細回覆。我正在使用Spring的ItemReader實現 - JdbcCursorItemReader,因此默認行爲應該工作。還有一個問題 - 會以同樣的方式重試工作嗎? –

+0

編輯了這個問題 - 增加了更多細節 –