以下是我的重试配置:

    <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文档获得答案的问题-希望您能提供以下输入:

当重试发生后处理200行后发生异常时,它是从第201行还是从第1行开始?

编辑

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

我想知道这是否有帮助:

从AbstractCursorItemReader

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

最佳答案

那取决于你的读者。 ItemReader实现负责通过ExecutionContext接口回调将自己的状态持久保存在ItemStream中。如果ItemReader一直通过ItemStream#update方法保持其状态(本例中假定的行号),并且ItemReader通过ItemSteam#open回调方法恢复了该状态,那么我希望它能够从正确的行重新开始。 Spring提供的所有ItemReader实现都在有意义的地方利用了此功能。我无法确定您的意愿,因为我对您配置中的myLookupItemReader没有任何了解。

09-25 20:16