2016-04-21 55 views
1

是否有可能JSR 352步分区 - 分区重新启动手动

  1. 监视每个分区
  2. 重新启动它们手动/编程时,他们失败的线程/线程。

从我读过的内容中,我了解到批处理框架为我们处理它。但是,如果我想自己做。我该怎么做?

我正在IBM Webshpere Liberty上使用IBM的JSR 352实现。

+0

因此,您希望能够在单个作业执行中重新启动某个步骤的各个分区而无需重新启动整个作业? –

+0

是的,是否有可能这样做? –

回答

2

批处理框架确实为您处理这些问题。它记录每个分区的最终状态(例如,COMPLETEDFAILED),并且在重新启动作业时它将仅重新启动那些分区,其中失败(默认情况下)。

但是,你只能直接操作工作。因此,在一般情况下,你会通过等待,直到所有其他分区练完(竣工失败),然后重新启动工作重新启动与失败分区工作,此时失败分区将重新执行。

因此它的设计目的是让尽可能多的当前执行完成,而不是快速失败。

如果是你所真正需要的是刚刚尽快重新启动每个分区,而无需等待所有分区完成和完成作业,你可能想看看在批重试功能。

E.g.回滚和重试SQLTransactionRollbackException您可以在XML通过这样做声明:

 <chunk retry-limit="3"> 
      <reader ref="..."> 
      ... 
      <retryable-exception-classes> 
      <include class="java.sql.SQLTransactionRollbackException"/> 
      </retryable-exception-classes> 
     </chunk> 

是否有此配合早已进入你的使用情况?如果没有,会有兴趣听到为什么不。

+0

谢谢!所以如果分区失败了,如果我等待作业完成并重新启动,那么只有失败的分区才会运行? 用例是,如果某个分区失败,并且是由于数据的某些问题(重复的记录等),我不希望分区保持自己重试。我想要的是修复数据并运行该分区。所以现在据我所知,我会让这个作业失败,当它重新启动时,只有失败的分区会运行。 另外如果我想再次运行完整的作业而不仅仅是失败的分区? –

+0

所以这听起来像一个普通的旧工作重新启动是你想要的,它听起来像**重试**可能不是你在寻找的事实。 –

+0

也许你可以将你关于如何“再次运行完整作业”的问题分离出一个新的问题?可能很难将答案纳入评论,而其他人则更容易将其作为单独的问题进行跟踪。 –