Spring批处理重试- Spring是从它停止的地方开始还是从头开始



下面是我重新尝试的配置:

    <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,则必须将数据源包装在ExtendedConnectionDataSourceProxy中,以防止在作为步骤处理的一部分执行的每次提交之后关闭和释放连接。您还必须使用支持JDBC 3.0或更高版本的JDBC驱动程序,因为游标将在启用'HOLD_CURSORS_OVER_COMMIT'的附加选项的情况下打开。

这取决于你的读者。ItemReader实现负责通过ItemStream接口回调在ExecutionContext中持久化它们自己的状态。如果ItemReader通过ItemStream#update方法保持了它的状态(在这种情况下我假设的行号),如果ItemReader通过ItemSteam#open回调方法恢复了该状态,那么我希望它在正确的行重新启动。Spring提供的所有ItemReader实现都在有意义的地方利用了这个功能。我只是不知道你的是否会,因为我不知道myLookupItemReader在你的配置中是什么。

最新更新