Spring batch retry-limit

问题描述 投票:1回答:3

在定义spring批处理作业并在xml描述中使用retry-limit参数时,它是运行的总数,还是重试的次数?即,当retry-limit = 1时,我的作业将运行一次还是两次(以防第一次运行时出错)?

这似乎是一个愚蠢的问题,但是我在所见过的任何文档中都没有找到明确的答案...

spring spring-batch
3个回答
3
投票

retry-limit属性实际上是“基于项目”而不是“基于作业”。 “基于项目”是指对于读取/处理/写入的每个项目(记录/行),如果该项目失败,将重试重试限制。如果达到该限制,则step将失败。

例如

<step id="someStep">
    <tasklet>
        <chunk reader="itemReader" writer="itemWriter"
               processor="itemProcessor" commit-interval="20"
               retry-limit="3">
            <retryable-exception-classes>
                <include class="org.springframework.exception.SomeException"/>
            </retryable-exception-classes>
        </chunk>
    </tasklet>
</step>

[在上述基本步骤配置中,当步骤中的任何组件(SomeExceptionitemReaderitemWriter)抛出itemProcessor时,该项目在该步骤之前最多重试三遍失败。


这里是Spring文档的说明

[在大多数情况下,您希望异常导致跳过或步进失败。但是,并非所有例外都是确定性的。如果在读取时遇到FlatFileParseException,它将始终被抛出该记录。重置ItemReader将无济于事。但是,对于其他例外,例如DeadlockLoserDataAccessException,它表示当前进程已尝试更新另一个进程已锁定的记录,请等待并重试可能会导致成功。在这种情况下,应配置重试:

<step id="step1">
   <tasklet>
      <chunk reader="itemReader" writer="itemWriter"
             commit-interval="2" retry-limit="3">
         <retryable-exception-classes>
            <include class="org.springframework.dao.DeadlockLoserDataAccessException"/>
         </retryable-exception-classes>
      </chunk>
   </tasklet>
</step>

该步骤限制了单个项目的重试次数,并列出了“可重试”的例外。有关重试工作方式的更多详细信息,请参见Chapter 9, Retry


0
投票

春季批处理作业会失败,如果任何步骤未能完成执行而没有任何错误或异常。如果在任何步骤中发生任何错误或异常,则将该步骤定义为失败,与此同时,该作业也被定义为失败的作业。


0
投票

重试限制属性实际上是“基于项目”而不是“基于作业”。 “基于项目”是指对于读取/处理/写入的每个项目(记录/行),如果该项目失败,将重试重试限制。如果达到该限制,则该步骤将失败。

© www.soinside.com 2019 - 2024. All rights reserved.