如何定义每10秒检查点的JSR 352块步骤(并使用内置的检查点)?

时间:2017-11-22 14:38:29

标签: websphere-liberty jsr352 java-batch

使用<chunk time-limit="10"...>有一种简单的方法吗?

我可以将时间限制与我的自定义 CheckpointAlgorithm 结合使用吗?

1 个答案:

答案 0 :(得分:1)

简答:

可能最简单的方法就像

<chunk time-limit="10" item-count="999999">

其中999,999只是一些永远不会被击中的大数字。

背景

为了解释原因,这里有一个更通用的答案&#34;我如何使用JSR 325内置检查点?&#34;

有两种方法可以在JSR 352中配置检查点,即两个检查点策略。

在JSL(XML)

这是默认设置,&#34;内置&#34;行为。

在Java中

由应用程序的CheckpointAlgorithm impl控制,并通过 checkpoint-policy =&#34;自定义&#34; 在JSL中启用。

内置政策基于项目或时间,取决于&#34;命中&#34;第一

了解内置检查点策略的基本要点是它基于项目计数或时间限制,以先到者为准。

实施例

  1. <chunk>

    10项后(默认)

  2. <chunk item-count="25">

    25项后

  3. <chunk time-limit="10">

    10秒或10件物品(再次,物品数量默认值),以先到者为准。

  4. <chunk time-limit="10" item-count="25">

    25件或10秒后,以先到者为准。

  5. <chunk time-limit="10" item-count="999999">

    999,999项之后,或10秒,以先到者为准(所以除了最简单的处理之外,这实际上意味着10秒之后,如果有必要,你可以使这个数字更大)。

  6. <chunk checkpoint-policy="custom">

    通过 CheckpointAlgorithm 在您自己的应用程序代码中实现,使用方法 isReadyToCheckpoint(),以及可选的超时),并引用如下:

    <chunk checkpoint-policy="custom">
        <checkpoint-algorithm ref="myCustomCheckpointAlgorithm">
    
  7. 讨论

    因此时间限制默认为&#39; 0&#39;这被定义为意味着&#34;无限时间&#34;或者&#34;不准时检查点&#34;。另一方面,项目计数默认为&#39; 10&#39;以及项目计数的类似行为&#39; 0&#39;未定义。

    因此,基于一些秒数的检查点的最佳方法就是将项目数设置得足够高,以至于它并不重要,这在实际应用中通常并不难。

    这是上面的例子#5。

    您无法将内置控件与&#34; custom&#34;算法!

    1. <chunk checkpoint-policy="custom" time-limit="5"> 时间限制是免费的!
    2. 您无法将自定义算法与任何&#34;项目&#34;检查点策略属性(这些属性只是被忽略)。你不能在5秒内根据我的自定义算法OR来说检查点,以先到者为准。

      1. <chunk checkpoint-policy="custom" item-count="500"> 项目计数是IGNORED!
      2. 与上一个示例相同。

        买者

        有一些旧的,过时的例子漂浮在周围,例如this article也包含&#34;&#34; commit-interval&#34;和&#34;时间&#34;检查站政策。这些 NOT 已合并到最终的1.0规范中。

        结束思考

        上述解决方案有一个不那么优雅,&#34; hack&#34;品质到它。

        也许规范应该定义item-count="0"意味着什么的行为,&#34;永远不会根据项目数&#34;检查点,这将允许更简单的解决方案。也许这应该考虑可能的1.1更新。