定义spring批处理作业并在xml描述中使用retry-limit参数时,它是运行总数还是重试次数? 即,当retry-limit = 1时,我的作业会运行一次还是两次(如果第一次运行时出错)?
这似乎是一个愚蠢的问题,但我没有在我见过的任何文档中找到明确的答案......
答案 0 :(得分:3)
retry-limit
属性实际上是“基于项目”而不是“基于作业”。通过“基于项目”我的意思是对于每个读取/处理/写入的项目(记录/行),如果该项目失败,将重试重试限制。如果达到该限制,步骤将失败。
例如
<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>
在上述基本步骤配置中,当步骤(SomeException
,itemReader
或itemWriter
)中的任何组件引发itemProcessor
时,该项目在步骤失败之前重试最多三次。
这是Spring doc的解释
在大多数情况下,您希望异常导致跳过或步骤失败。但是,并非所有例外都是确定性的。如果在阅读时遇到
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。
答案 1 :(得分:0)
spring批处理作业失败。 如果在任何步骤中发生任何错误或异常,则该步骤被定义为失败,因此该作业也被定义为失败的作业。
首先,如果要重新启动作业,则需要确保将作业定义为可重新启动。除此以外 你再也不能跑同样的工作了。更多的工作只能重新启动,并且只有在之前失败时才能重启 尝试。成功完成后,即使将其声明为可重启,也无法重新启动作业,是的,但是作业参数必须不同。
retry-limit属性定义失败作业的失败任务/步骤可以重试启动的次数
要使用重试限制,您还需要定义应重试的异常或错误
答案 2 :(得分:0)
retry-limit属性实际上是“基于项目”而不是“基于作业”。 “基于项目”是指对于读取/处理/写入的每个项目(记录/行),如果该项目失败,将重试重试限制。如果达到该限制,则该步骤将失败。
例如,如果将retry-limit设置为2,它将尝试执行两次。