Spring Batch Retry - Spring从中断开始还是从开始

时间:2016-09-20 13:32:49

标签: java 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>

以下是我无法从Spring doc获得答案的问题 - 希望得到输入:

如果在重试发生后处理200行后发生异常,它是从第201行还是从第1行开始的?

修改

我试图解决的问题是,当作业运行时,在第一个块(100行)提交后立即终止(重置)与ItemReader的连接。然后重新启动作业并成功完成。

我想知道这是否有帮助:

来自AbstractCursorItemReader

有一个选项(setUseSharedExtendedConnection(boolean)将与其余的步骤处理共享用于游标的连接。如果将此标志设置为true,则必须将DataSource包装在ExtendedConnectionDataSourceProxy中以防止作为步骤处理的一部分执行每次提交后关闭和释放的连接。您还必须使用支持JDBC 3.0或更高版本的JDBC驱动程序,因为将打开游标并启用“HOLD_CURSORS_OVER_COMMIT”附加选项。

1 个答案:

答案 0 :(得分:2)

这取决于您的读者。 ItemReader实现负责通过ExecutionContext接口回调在ItemStream中保持自己的状态。如果ItemReader通过ItemStream#update方法保留了它的状态(在这种情况下,行号I&#39; d假设),并且ItemReader通过{恢复该状态{1}}回调方法,然后我希望它在正确的行重新启动。所有Spring提供的ItemSteam#open实现都在有意义的地方使用了这个功能。我无法告诉您是否会这样做,因为我对您的配置中ItemReader的内容没有任何了解。