2016-09-20 63 views
0

开始下面是我的重试配置: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> 

下面是我的问题,而我无法摆脱春季DOC答案 - 将不胜感激输入:

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

编辑

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

我想知道如果这可能帮助:

从AbstractCursorItemReader

有将共享用于光标与步处理的其它部分连接的选项(setUseSharedExtendedConnection(布尔) 。如果你将这个标志设置为true,那么你必须将DataSource包装在ExtendedConnectionDataSourceProxy中,以防止在作为步骤处理的一部分执行每次提交之后关闭和释放连接。还必须使用支持JDBC 3.0或更高版本的JDBC驱动程序,因为光标将随附加打开选项'HOLD_CURSORS_OVER_COMMIT'已启用。

+0

你在用什么读卡器? –

+0

org.springframework.batch.item.database.JdbcCursorItemReader。读写也是针对两种不同的数据源,这就是为什么最初我想追求XA分布式事务。 –

+0

@MichaelMinella - 你有没有更新?我计划在下周初尝试重启(因为我们本周已部署)。 AbstractCursorItemReader中的文档UseSharedExtendedConnection似乎很适合尝试。 –

回答

1

这取决于你的读者。 ItemReader实现负责通过ItemStream接口回调在ExecutionContext中坚持自己的状态。如果ItemReader通过ItemStream#update方法持续保留它的状态(在这种情况下我会假设的行号),如果ItemReader通过ItemSteam#open回调方法恢复该状态,那么我希望它在正确的行重新启动。所有Spring提供的ItemReader实现在有意义的地方使用这个功能。由于我对myLookupItemReader在您的配置中没有任何了解,因此我无法分辨您的问题。

+0

谢谢@Michael的详细回复。我正在使用Spring的ItemReader实现 - JdbcCursorItemReader,因此默认行为应该工作。还有一个问题 - 会以同样的方式重试工作吗? –

+0

编辑了这个问题 - 增加了更多细节 –