我如何定义一个 JSR 352 块步骤以每 10 秒检查一次(并通常使用内置检查点)?
How can I define a JSR 352 chunk step to checkpoint every 10 seconds (and use built-in checkpointing in general)?
有没有使用<chunk time-limit="10"...>
的简单方法?
我可以将 时间限制 与我的自定义 CheckpointAlgorithm 结合使用吗?
简答:
可能最简单的方法是
<chunk time-limit="10" item-count="999999">
其中 999,999 只是一个永远不会被击中的大数字。
背景
为了解释原因,下面是对“如何使用 JSR 352 内置检查点?”的更笼统的回答。
在 JSR 352 中有两种配置检查点的方法,即两种检查点策略。
在 JSL 中 (XML)
这是默认的“内置”行为。
在Java
由应用程序的 CheckpointAlgorithm 实现控制,并通过 JSL 中的 checkpoint-policy="custom" 启用。
内置策略基于项目或时间,以先“命中”者为准
了解内置检查点策略的基本点是它基于项目计数或时间限制,以先到者为准。
例子
<chunk>
10 项后(默认)
<chunk item-count="25">
25 项后
<chunk time-limit="10">
10 秒后或 10 个项目(同样,项目计数默认值),以先到者为准。
<chunk time-limit="10" item-count="25">
25 项后或 10 秒,以先到者为准。
<chunk time-limit="10" item-count="999999">
在 999,999 项或 10 秒之后,以先到者为准(所以在除最简单的处理之外的所有处理中,这实际上意味着在 10 秒之后,如有必要,您可以使这个数字更大)。
<chunk checkpoint-policy="custom">
通过 CheckpointAlgorithm 在您自己的应用程序代码中实现,使用方法 isReadyToCheckpoint(),以及可选的超时),并引用喜欢:
<chunk checkpoint-policy="custom">
<checkpoint-algorithm ref="myCustomCheckpointAlgorithm">
讨论
因此 time-limit 默认为“0”,定义为“无限时间”或“不准时检查点”。另一方面,item-count 默认为“10”,而 item-count 为“0”的类似行为是未定义的。
因此,基于某些秒数的检查点的最佳方法只是将项目计数设置得足够高,这无关紧要,这在实际应用程序中通常并不难。
这是上面的示例 #5。
您不能将内置控件与您的“自定义”算法结合使用!
<chunk checkpoint-policy="custom" time-limit="5">
忽略时间限制!
您不能将自定义算法与任何“项目”检查点策略属性结合使用(这些属性将被忽略)。您不能说检查点基于我的自定义算法或 5 秒,以先到者为准。
<chunk checkpoint-policy="custom" item-count="500">
项目数被忽略!
与前面的示例相同。
警告
周围有一些旧的、过时的例子,例如this article 还包含“提交间隔”和“时间”检查点策略。这些 未 并入最终的 1.0 规范。
结束语
上面的解决方案不太优雅,“黑客”质量。
也许规范应该定义一种行为,其中 item-count="0"
表示“从不根据项目计数设置检查点”,这将允许更简单的解决方案。也许这应该被考虑用于可能的 1.1 更新。
有没有使用<chunk time-limit="10"...>
的简单方法?
我可以将 时间限制 与我的自定义 CheckpointAlgorithm 结合使用吗?
简答:
可能最简单的方法是
<chunk time-limit="10" item-count="999999">
其中 999,999 只是一个永远不会被击中的大数字。
背景
为了解释原因,下面是对“如何使用 JSR 352 内置检查点?”的更笼统的回答。
在 JSR 352 中有两种配置检查点的方法,即两种检查点策略。
在 JSL 中 (XML)
这是默认的“内置”行为。
在Java
由应用程序的 CheckpointAlgorithm 实现控制,并通过 JSL 中的 checkpoint-policy="custom" 启用。
内置策略基于项目或时间,以先“命中”者为准
了解内置检查点策略的基本点是它基于项目计数或时间限制,以先到者为准。
例子
<chunk>
10 项后(默认)
<chunk item-count="25">
25 项后
<chunk time-limit="10">
10 秒后或 10 个项目(同样,项目计数默认值),以先到者为准。
<chunk time-limit="10" item-count="25">
25 项后或 10 秒,以先到者为准。
<chunk time-limit="10" item-count="999999">
在 999,999 项或 10 秒之后,以先到者为准(所以在除最简单的处理之外的所有处理中,这实际上意味着在 10 秒之后,如有必要,您可以使这个数字更大)。
<chunk checkpoint-policy="custom">
通过 CheckpointAlgorithm 在您自己的应用程序代码中实现,使用方法 isReadyToCheckpoint(),以及可选的超时),并引用喜欢:
<chunk checkpoint-policy="custom"> <checkpoint-algorithm ref="myCustomCheckpointAlgorithm">
讨论
因此 time-limit 默认为“0”,定义为“无限时间”或“不准时检查点”。另一方面,item-count 默认为“10”,而 item-count 为“0”的类似行为是未定义的。
因此,基于某些秒数的检查点的最佳方法只是将项目计数设置得足够高,这无关紧要,这在实际应用程序中通常并不难。
这是上面的示例 #5。
您不能将内置控件与您的“自定义”算法结合使用!
<chunk checkpoint-policy="custom" time-limit="5">
忽略时间限制!
您不能将自定义算法与任何“项目”检查点策略属性结合使用(这些属性将被忽略)。您不能说检查点基于我的自定义算法或 5 秒,以先到者为准。
<chunk checkpoint-policy="custom" item-count="500">
项目数被忽略!
与前面的示例相同。
警告
周围有一些旧的、过时的例子,例如this article 还包含“提交间隔”和“时间”检查点策略。这些 未 并入最终的 1.0 规范。
结束语
上面的解决方案不太优雅,“黑客”质量。
也许规范应该定义一种行为,其中 item-count="0"
表示“从不根据项目计数设置检查点”,这将允许更简单的解决方案。也许这应该被考虑用于可能的 1.1 更新。