簡體   English   中英

重試春季作業失敗的批次

[英]retry failed job spring batch

我想在xml中定義一個重試限制,如果對某個特定項目的任何讀/處理/寫操作失敗,它將重試定義的次數。 我明白了這個概念,但是沒有讓它在代碼中起作用。

我在項目中也擁有所有適當的maven支持依賴項。

這是該步驟的xml定義:

<batch:step id="step1" >
        <batch:tasklet>
            <batch:chunk reader="myReader" processor="myProcessor" writer="myWriter" commit-interval="10" **retry-limit="3"**>
                <batch:retryable-exception-classes>
                    <batch:include class="java.lang.ArithmeticException"/>
                </batch:retryable-exception-classes>
            </batch:chunk>
        </batch:tasklet>
</batch:step>

我正在使用JdbcCursorItemReader從數據庫讀取。 在映射器中,我試圖手動引發一個錯誤(java.lang.ArithmeticException:/ by zero),只是為了檢查其工作原理。 我的理解是,當遇到“ / by zero”錯誤時,它應該重試3次並最終失敗,但我看不到它會退出。 我在這里想念什么嗎?

重試僅在塊步驟的處理和寫入階段進行,而不在讀取階段進行。 對此進行一些討論:

反思之后,我認為我們不應該支持重試ItemReader-語義很難定義。 您這里的實際用例是什么? 可重試的ItemReader做什么? 通常的問題是ItemReader是“僅轉發”合同-通常無法使用我們擁有的接口來實現可以返回到流中先前位置的讀取器(並且我們不會使其變得更復雜)沒有充分的理由)。 鑒於此,如果read()失敗,那么當我們“重試”該操作時讀者應該怎么做? 轉到下一項是唯一可能的選擇,其功能與跳過相同。

考慮放棄XML並僅使用Failsafe

RetryPolicy retryPolicy = new RetryPolicy()
  .retryOn(ArithmeticException.class)
  .withMaxRetries(3);

Failsafe.with(retryPolicy).run(() -> processBatch());

更大的靈活性,更少的脆弱性,真實的代碼,並且有效。

因此,據我了解,spring不會自行重試,除非您告訴它這樣做。 重試限制和所有其他參數僅是限制,而不是實際的重試本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM